CodeGym /Blog Jawa /Acak /Pola desain: metode pabrik
John Squirrels
tingkat
San Francisco

Pola desain: metode pabrik

Diterbitake ing grup
Hi! Dina iki kita bakal terus sinau pola desain lan kita bakal ngrembug pola metode pabrik. Pola desain: Metode pabrik - 1 Sampeyan bakal ngerti apa iku lan apa tugas pola iki cocok kanggo. Kita bakal nimbang pola desain iki ing praktik lan sinau strukture. Kanggo mesthekake kabeh cetha, sampeyan kudu ngerti topik ing ngisor iki:
  1. Pusaka ing Jawa.
  2. Metode lan kelas abstrak ing basa Jawa

Apa masalah cara pabrik ngatasi?

Kabeh pola desain pabrik duwe rong jinis peserta: pencipta (pabrik dhewe) lan produk (obyek sing digawe pabrik). Bayangake kahanan ing ngisor iki: kita duwe pabrik sing ngasilake mobil bermerek CodeGym. Iku ngerti carane nggawe model mobil karo macem-macem jinis awak:
  • sedan
  • gerbong stasiun
  • coupe
Bisnis kita makmur banget nganti sawijining dina kita entuk produsen mobil liyane - OneAuto. Dadi pamilik bisnis sing wicaksana, kita ora pengin kelangan pelanggan OneAuto, mula kita ngadhepi tugas nyusun ulang produksi supaya bisa ngasilake:
  • Sedan CodeGym
  • CodeGym station wagon
  • KodeGym coupes
  • sedan OneAuto
  • OneAuto station wagon
  • OneAuto coupe
Nalika sampeyan bisa ndeleng, tinimbang siji klompok produk, kita saiki duwe loro, lan padha beda-beda ing rincian tartamtu. Pola desain metode pabrik yaiku nalika kita kudu nggawe macem-macem klompok produk, sing saben duwe ciri tartamtu. Kita bakal nimbang prinsip nuntun pola iki ing laku, mboko sithik obah saka prasaja kanggo Komplek, nggunakake conto warung kopi kita, kang digawe ing salah siji saka pawulangan sadurungé .

A dicokot babagan pola pabrik

Ayo kula ngelingake yen kita sadurunge nggawe warung kopi virtual cilik. Kanthi bantuan saka pabrik prasaja, kita sinau carane nggawe macem-macem jinis kopi. Dina iki kita bakal ngolah maneh conto iki. Ayo kelingan carane warung kopi kita, kanthi pabrik sing prasaja. Kita duwe kelas kopi:

public class Coffee {
    public void grindCoffee(){
        // Grind the coffee
    }
    public void makeCoffee(){
        // Brew the coffee
    }
    public void pourIntoCup(){
        // Pour into a cup
    }
}
Lan sawetara kelas anak sing cocog karo jinis kopi tartamtu sing bisa diprodhuksi pabrik kita:

public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
Kita nggawe enum kanggo nggawe pesenan gampang:

public enum CoffeeType {
    ESPRESSO,
    AMERICANO,
    CAFFE_LATTE,
    CAPPUCCINO
}
Pabrik kopi dhewe katon kaya mangkene:

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 Cappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new CaffeLatte();
                break;
        }
        
        return coffee;
    }
}
Lan pungkasane, warung kopi dhewe katon kaya iki:

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;
    }
}

Modernisasi pabrik sing prasaja

Warung kopi kita mlaku kanthi apik. Dadi luwih supaya kita nimbang ngembangaken. Kita pengin mbukak sawetara lokasi anyar. We are wani lan enterprising, supaya kita ora crank metu mboseni warung kopi. Kita pengin saben toko duwe corak khusus. Mula, kita bakal mbukak rong lokasi: siji Italia lan siji Amerika. Owah-owahan kasebut ora mung mengaruhi desain interior, nanging uga minuman sing ditawakake:
  • ing warung kopi Italia, kita bakal nggunakake merek kopi khusus Italia, kanthi grinding lan roasting khusus.
  • lokasi Amérika bakal bagean luwih gedhe, lan kita bakal ngawula marshmallows karo saben pesenan.
Siji-sijine sing tetep ora owah yaiku model bisnis kita, sing wis kabukten apik banget. Ing babagan kode, iki kedadeyan. Kita duwe 4 kelas sing cocog karo produk kita:

public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
Nanging saiki kita bakal duwe 8:

public class ItalianStyleAmericano extends Coffee {}
public class ItalianStyleCappucino extends Coffee {}
public class ItalianStyleCaffeLatte extends Coffee {}
public class ItalianStyleEspresso extends Coffee {}

public class AmericanStyleAmericano extends Coffee {}
public class AmericanStyleCappucino extends Coffee {}
public class AmericanStyleCaffeLatte extends Coffee {}
public class AmericanStyleEspresso extends Coffee {}
Awit kita pengin tetep model bisnis saiki, kita pengin orderCoffee(CoffeeType type)cara kanggo ngalami sawetara owah-owahan sabisa. Coba delengen:

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;
}
Apa pilihan sing kita duwe? Nah, kita wis ngerti carane nulis pabrik, ta? Wangsulan: Bab ingkang paling prasaja sing langsung teka ing atine kanggo nulis loro pabrik padha, lan banjur pass implementasine dikarepake kanggo konstruktor warung kopi kita. Kanthi mengkono, kelas warung kopi ora bakal owah. Pisanan, kita kudu nggawe kelas pabrik anyar, nggawe warisan pabrik sing prasaja, banjur ngilangi createCoffee(CoffeeType type)cara kasebut. Ayo nulis pabrik kanggo nggawe kopi gaya Italia lan kopi gaya Amerika:

public class SimpleItalianCoffeeFactory extends SimpleCoffeeFactory {

    @Override
    public Coffee createCoffee(CoffeeType type) {
        Coffee coffee = null;
        switch (type) {
            case AMERICANO:
                coffee = new ItalianStyleAmericano();
                break;
            case ESPRESSO:
                coffee = new ItalianStyleEspresso();
                break;
            case CAPPUCCINO:
                coffee = new ItalianStyleCappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new ItalianStyleCaffeLatte();
                break;
        }
        return coffee;
    }
}

public class SimpleAmericanCoffeeFactory extends SimpleCoffeeFactory{

    @Override
    public Coffee createCoffee (CoffeeType type) {
        Coffee coffee = null;

        switch (type) {
            case AMERICANO:
                coffee = new AmericanStyleAmericano();
                break;
            case ESPRESSO:
                coffee = new AmericanStyleEspresso();
                break;
            case CAPPUCCINO:
                coffee = new AmericanStyleCappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new AmericanStyleCaffeLatte();
                break;
        }

        return coffee;
    }

}
Saiki kita bisa ngirim implementasi pabrik sing dikarepake menyang CoffeeShop. Ayo ndeleng kaya apa kode pesenan kopi saka macem-macem warung kopi. Contone, cappuccino gaya Italia lan Amerika:

public class Main {
    public static void main(String[] args) {
        /*
            Order an Italian-style cappuccino:
            1. Create a factory for making Italian coffee
            2. Create a new coffee shop, passing the Italian coffee factory to it through the constructor
            3. Order our coffee
         */
        SimpleItalianCoffeeFactory italianCoffeeFactory = new SimpleItalianCoffeeFactory();
        CoffeeShop italianCoffeeShop = new CoffeeShop(italianCoffeeFactory);
        italianCoffeeShop.orderCoffee(CoffeeType.CAPPUCCINO);
        
        
         /*
            Order an American-style cappuccino
            1. Create a factory for making American coffee
            2. Create a new coffee shop, passing the American coffee factory to it through the constructor
            3. Order our coffee
         */
        SimpleAmericanCoffeeFactory americanCoffeeFactory = new SimpleAmericanCoffeeFactory();
        CoffeeShop americanCoffeeShop = new CoffeeShop(americanCoffeeFactory);
        americanCoffeeShop.orderCoffee(CoffeeType.CAPPUCCINO);
    }
}
Kita nggawe rong toko kopi sing beda-beda, ngliwati pabrik sing dikarepake kanggo saben. Ing sisih siji, kita wis ngrampungake tujuane, nanging ing sisih liya ... Piye wae iki ora cocog karo para pengusaha ... Ayo ngerteni apa sing salah. Kaping pisanan, akeh pabrik. opo? Saiki kanggo saben lokasi anyar, kita kudu nggawe pabrik dhewe lan, saliyane iku, priksa manawa pabrik sing relevan dikirim menyang konstruktor nalika nggawe warung kopi? Kapindho, iku isih pabrik prasaja. Mung rada modern. Nanging kita kene kanggo sinau pola anyar. Katelu, apa ora ana pendekatan sing beda? Iku bakal apik yen kita bisa sijine kabeh masalah related kanggo preparation warung menyangCoffeeShopkelas kanthi ngubungake proses nggawe kopi lan nglayani pesenan, nalika bebarengan njaga keluwesan sing cukup kanggo nggawe macem-macem gaya kopi. Jawabane ya, kita bisa. Iki diarani pola desain metode pabrik.

Saka pabrik sing prasaja nganti cara pabrik

Kanggo ngatasi tugas kanthi efisien sabisa:
  1. Kita bali createCoffee(CoffeeType type)cara kanggo CoffeeShopkelas.
  2. Kita bakal nggawe metode iki abstrak.
  3. Kelas CoffeeShopdhewe bakal dadi abstrak.
  4. Kelas kasebut CoffeeShopbakal duwe kelas bocah.
Ya, kanca. Warung kopi Italia ora liya minangka turunan saka CoffeeShopkelas, sing ngetrapake createCoffee(CoffeeType type)metode kasebut miturut tradhisi barista Italia sing paling apik. Saiki, siji langkah ing wektu. Langkah 1. Nggawe Coffeekelas abstrak. We duwe loro kulawarga kabèh produk beda. Nanging, kopi Italia lan Amerika duwe leluhur sing padha - kelas Coffee. Iku bakal cocok kanggo nggawe abstrak:

public abstract class Coffee {
    public void makeCoffee(){
        // Brew the coffee
    }
    public void pourIntoCup(){
        // Pour into a cup
    }
}
Langkah 2. Nggawe CoffeeShopabstrak, kanthi createCoffee(CoffeeType type)metode abstrak

public abstract class CoffeeShop {

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

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

        System.out.println("Here's your coffee! Thanks! Come again!");
        return coffee;
    }

    protected abstract Coffee createCoffee(CoffeeType type);
}
Langkah 3. Nggawe warung kopi Italia, sing minangka turunan saka kopi abstrak. Kita ngleksanakake createCoffee(CoffeeType type)cara kasebut, kanthi nganggep spesifik resep Italia.

public class ItalianCoffeeShop extends CoffeeShop {

    @Override
    public Coffee createCoffee (CoffeeType type) {
        Coffee coffee = null;
        switch (type) {
            case AMERICANO:
                coffee = new ItalianStyleAmericano();
                break;
            case ESPRESSO:
                coffee = new ItalianStyleEspresso();
                break;
            case CAPPUCCINO:
                coffee = new ItalianStyleCappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new ItalianStyleCaffeLatte();
                break;
        }
        return coffee;
    }
}
Langkah 4. Kita nindakake sing padha kanggo warung kopi gaya Amerika

public class AmericanCoffeeShop extends CoffeeShop {
    @Override
    public Coffee createCoffee(CoffeeType type) {
        Coffee coffee = null;

        switch (type) {
            case AMERICANO:
                coffee = new AmericanStyleAmericano();
                break;
            case ESPRESSO:
                coffee = new AmericanStyleEspresso();
                break;
            case CAPPUCCINO:
                coffee = new AmericanStyleCappuccino();
                break;
            case CAFFE_LATTE:
                coffee = new AmericanStyleCaffeLatte();
                break;
        }

        return coffee;
    }
}
Langkah 5. Priksa carane latte Amerika lan Italia bakal katon:

public class Main {
    public static void main(String[] args) {
        CoffeeShop italianCoffeeShop = new ItalianCoffeeShop();
        italianCoffeeShop.orderCoffee(CoffeeType.CAFFE_LATTE);

        CoffeeShop americanCoffeeShop = new AmericanCoffeeShop();
        americanCoffeeShop.orderCoffee(CoffeeType.CAFFE_LATTE);
    }
}
Sugeng. Kita mung ngetrapake pola desain metode pabrik nggunakake warung kopi minangka conto.

Prinsip konco metode pabrik

Saiki ayo nimbang kanthi luwih rinci apa sing kita entuk. Diagram ing ngisor iki nuduhake kelas sing diasilake. Blok ijo minangka kelas pencipta, lan blok biru minangka kelas produk. Pola desain: Metode pabrik - 2Apa kesimpulan sing bisa ditindakake?
  1. Kabeh produk minangka implementasi saka Coffeekelas abstrak.
  2. Kabeh pangripta minangka implementasi saka CoffeeShopkelas abstrak.
  3. Kita ndeleng rong hierarki kelas paralel:
    • Hierarki produk. Kita ndeleng keturunan Italia lan keturunan Amerika
    • Hierarki pangripta. Kita ndeleng keturunan Italia lan keturunan Amerika
  4. Superclass CoffeeShopora duwe informasi babagan produk tartamtu ( Coffee) sing bakal digawe.
  5. Superclass CoffeeShoputusan nggawe produk tartamtu kanggo turunane.
  6. Saben turunan saka CoffeeShopkelas ngleksanakake createCoffee()cara pabrik sesuai karo fitur spesifik dhewe. Ing tembung liyane, implementasine saka kelas produser nyiapake produk tartamtu adhedhasar spesifik saka kelas produser.
Sampeyan saiki wis siyap kanggo definisi pola metode pabrik . Pola cara pabrik nemtokake antarmuka kanggo nggawe obyek, nanging ngidini subclass kanggo milih kelas obyek sing digawe. Mangkono, cara pabrik utusan nggawe conto menyang subkelas. Umumé, ngelingi definisi ora penting kaya ngerti cara kerjane.

Struktur metode pabrik

Pola desain: Metode pabrik - 3Diagram ing ndhuwur nuduhake struktur umum pola metode pabrik. Apa maneh sing penting ing kene?
  1. Kelas Creator ngetrapake kabeh metode sing sesambungan karo produk, kajaba metode pabrik.
  2. Cara abstrak factoryMethod()kudu ditindakake dening kabeh turunan kelas Creator.
  3. Kelas ConcreteCreatorngleksanakake factoryMethod()cara, sing langsung nggawe produk.
  4. Kelas iki tanggung jawab kanggo nggawe produk tartamtu. Iki minangka siji-sijine kelas kanthi informasi babagan nggawe produk kasebut.
  5. Kabeh produk kudu ngleksanakake antarmuka umum, yaiku kudu dadi turunan saka kelas produk umum. Iki perlu supaya kelas sing nggunakake produk bisa digunakake minangka abstraksi, tinimbang implementasine tartamtu.

Peer

Dina iki kita wis nindakake cukup akeh karya lan sinau pola desain cara pabrik. Wektu kanggo nguatake materi! Garapan 1. Gawea gawe mbukak warung maning. Bisa uga warung kopi gaya Inggris utawa gaya Spanyol. Utawa malah spaceship-gaya. Tambah pewarna pangan ing kopi supaya padhang, lan kopi sampeyan bakal metu saka donya iki! Latihan 2. Ing wulangan pungkasan , sampeyan duwe latihan ing ngendi sampeyan nggawe bar sushi virtual utawa pizzeria virtual. Saiki olahraga sampeyan ora mandheg. Dina iki sampeyan sinau carane nggunakake pola cara pabrik kanggo kauntungan. Iku wektu kanggo nggunakake kawruh iki lan nggedhekake bisnis dhewe;)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION