KodeGym/Blog Jawa/Acak/Pola desain pabrik
John Squirrels
tingkat
San Francisco

Pola desain pabrik

Diterbitake ing grup
Hai, kanca! Dina iki kita bakal terus sinau pola desain. Ing wulangan iki, kita bakal ngomong babagan pabrik. Kita bakal ngrembug masalah sing ditanggulangi pola iki lan deleng conto carane pabrik bisa mbantu sampeyan mbukak warung kopi. Kajaba iku, aku bakal menehi 5 langkah prasaja kanggo nggawe pabrik. Pola desain pabrik - 1 Kanggo mesthekake yen kita kabeh padha ing dawa gelombang sing padha lan sampeyan bakal cepet ngerti konsep iki, sampeyan kudu ngerti topik ing ngisor iki:
  • Pusaka ing Jawa
  • Narrowing lan widening jinis referensi ing Jawa
  • Interaksi antarane macem-macem kelas lan obyek.

Apa iku pabrik?

Pola desain pabrik ngidini sampeyan ngontrol nggawe obyek. Proses nggawe obyek anyar ora super prasaja, nanging uga ora rumit banget. Kita kabeh ngerti yen kita butuh newoperator kanggo nggawe obyek anyar. Mbok misale jek sing ana apa-apa kanggo kontrol kene, nanging sing ora bener. Upamane lamaran kita nduweni golongan tartamtu kang akeh turunane. Kesulitan bisa muncul nalika perlu kanggo nggawe conto kelas tartamtu gumantung ing kahanan tartamtu. Pabrik minangka pola desain sing mbantu ngatasi masalah nggawe macem-macem obyek gumantung ing kahanan tartamtu . Kepiye konsep abstrak? Iki bakal dadi luwih jelas lan luwih spesifik nalika ndeleng conto ing ngisor iki.

Ayo nyiyapake macem-macem jinis kopi

Upaminipun kita pengin ngotomatisasi warung kopi. Kita kudu mulang program kita carane nggawe macem-macem jinis kopi. Kanggo nindakake iki, kita bakal nggawe kelas kopi lan sawetara kelas turunan kanggo makili jinis kopi sing bakal disiapake: Americano, cappuccino, espresso, lan latte. Ayo diwiwiti kanthi kelas kopi umum:
public class Coffee {
    public void grindCoffee(){
        // Grind the coffee
    }
    public void makeCoffee(){
        // Brew the coffee
    }
    public void pourIntoCup(){
        // Pour into a cup
    }
}
Sabanjure, kita bakal nggawe kelas anak:
public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
Pelanggan bisa pesen kopi apa wae. Pesenan kasebut kudu dikirim menyang program kasebut. Iki bisa ditindakake kanthi pirang-pirang cara, contone, nggunakake String. Nanging sing enumpaling apik kanggo iki. Kita bakal nggawe enumlan nemtokake kolom enum sing cocog karo jinis kopi sing bisa dipesen:
public enum CoffeeType {
    ESPRESSO,
    AMERICANO,
    CAFFE_LATTE,
    CAPPUCCINO
}
Agung. Saiki ayo nulis kode kanggo warung kopi kita:
public class CoffeeShop {

    public Coffee orderCoffee(CoffeeType type) {
        Coffee coffee = null;

        switch (type) {
            case AMERICANO:
                coffee = new Americano();
                break;
            case ESPRESSO:
                coffee = new Espresso();
                break;
            case CAPPUCCINO:
                coffee = new Cappucсino();
                break;
            case CAFFE_LATTE:
                coffee = new CaffeLatte();
                break;
        }

        coffee.grindCoffee();
        coffee.makeCoffee();
        coffee.pourIntoCup();

        System.out.println("Here's your coffee! Thanks! Come again!");
        return coffee;
    }
}
Cara kasebut orderCoffeebisa dipérang dadi rong bagéan:
  1. Nggawe conto kopi tartamtu ing switchstatement. Ing kene pabrik nindakake apa sing ditindakake - nggawe jinis tartamtu gumantung saka kahanan.
  2. Preparation - iki mecah, brewing, lan pouring menyang tuwung.
Mangkene sing penting kanggo ngerti yen sampeyan kudu ngowahi cara kasebut ing mangsa ngarep:
  1. Langkah-langkah sing ana ing persiapan dhewe (grinding, brewing, lan pour menyang cangkir) bakal tetep ora owah (paling ora kita ngetung iki).
  2. Nanging macem-macem kopi bisa diganti. Mungkin kita bakal miwiti nggawe mocha ... Frappu ... Mochacci ... Apa wae, jinis kopi anyar.
Kita wis bisa yakin manawa ing mangsa ngarep kita kudu nggawe owah-owahan ing switchstatement metode kasebut. Bisa uga ing warung kopi kita, orderCoffeemetode kasebut ora mung minangka papan kanggo nggawe macem-macem jinis kopi. Akibaté, owah-owahan kudu digawe ing sawetara panggonan. Sampeyan mbokmenawa wis ngerti apa sing dakkarepake. Kita kudu refactor. Pindhah blok sing tanggung jawab kanggo nggawe kopi menyang kelas sing kapisah amarga rong alasan:
  1. Kita bisa nggunakake maneh logika nggawe kopi ing panggonan liya.
  2. Yen macem-macem diganti, kita ora kudu ngowahi kode ing endi wae kopi digawe. Cukup kanggo ngganti kode kita ing sak panggonan.
Ing tembung liyane, wektu wis teka kanggo nggawe pabrik.

Nggawe pabrik pisanan kita

Kanggo nindakake iki, kita bakal nggawe kelas anyar sing mung tanggung jawab kanggo nggawe kelas kopi sing dibutuhake:
public class SimpleCoffeeFactory {
    public Coffee createCoffee(CoffeeType type) {
        Coffee coffee = null;

        switch (type) {
            case AMERICANO:
                coffee = new Americano();
                break;
            case ESPRESSO:
                coffee = new Espresso();
                break;
            case CAPPUCCINO:
                coffee = new Cappucino();
                break;
            case CAFFE_LATTE:
                coffee = new CaffeLatte();
                break;
        }

        return coffee;
    }
}
Sugeng rawuh! Kita mung nerapake pola desain pabrik ing wangun sing paling gampang (meh). Bisa uga luwih gampang yen kita nggawe createCoffeemetode statis. Nanging banjur kita bakal kelangan rong kemampuan:
  1. Kemampuan kanggo marisi SimpleCoffeeFactorylan ngatasi createCoffeemetode kasebut.
  2. Kemampuan kanggo nambah implementasi pabrik sing dibutuhake ing kelas kita.
Miturut cara, ngandika implementasine ... Kita kudu bali menyang warung lan nambah pabrik kopi kita.

Tambah pabrik ing warung kopi

Ayo nulis ulang kelas warung kopi nggunakake pabrik:
public class CoffeeShop {

    private final SimpleCoffeeFactory coffeeFactory;

    public CoffeeShop(SimpleCoffeeFactory coffeeFactory) {
        this.coffeeFactory = coffeeFactory;
    }

    public Coffee orderCoffee(CoffeeType type) {
        Coffee coffee = coffeeFactory.createCoffee(type);
        coffee.grindCoffee();
        coffee.makeCoffee();
        coffee.pourIntoCup();

        System.out.println("Here's your coffee! Thanks! Come again!");
        return coffee;
    }
}
Banget. Saiki kita bakal menehi katrangan ringkes babagan struktur umum pola desain pabrik.

5 langkah kanggo mbukak pabrik dhewe

Langkah 1. Program sampeyan duwe kelas kanthi sawetara turunan, kaya ing diagram ing ngisor iki: Pola desain pabrik - 2Langkah 2. Sampeyan nggawe lapangan enumkanthi lapangan kanggo saben kelas bocah:
enum CatType {
    LION,
    TIGER,
    FLUFFY
}
Langkah 3. Mbangun pabrik Panjenengan. Sebut wae CatFactory. Iki kode:
class CatFactory {}
Langkah 4. Ing pabrik sampeyan, nggawe createCatcara sing njupuk CatTypebantahan. Iki kode:
class CatFactory {
    public Cat createCat(CatType type) {

    }
}
Langkah 5. Ing awak saka cara, nulis switchstatement sing enumerates kolom enum lan nggawe Kayata saka kelas sing cocog karo enumnilai liwati:
class CatFactory {
        public Cat createCat(CatType type) {
            Cat cat = null;

            switch (type) {
                case LION:
                    cat =  new Fluffy();
                    break;
                case TIGER:
                    cat = new Tiger();
                    break;
                case FLUFFY:
                    cat =  new Lion();
                    break;
            }

            return cat;
        }
    }
Saiki sampeyan bisa mbukak pabrik kaya bos. :)

Carane laku

Maca apik, nulis kode luwih apik. Yen jeneng sampeyan duwe jumlah huruf sing padha, coba gawe pizza virtual sampeyan dhewe. Yen jeneng sampeyan duwe nomer ganjil, coba gawe bar sushi virtual. Yen sampeyan ora duwe jeneng, sampeyan begja. Dina iki sampeyan bisa santai.
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar