JavaRush /Blog Jawa /Random-JV /Pola desain pabrik

Pola desain pabrik

Diterbitake ing grup
Hai, kanca! Dina iki kita bakal terus sinau pola desain karo sampeyan. Ing kuliah iki kita bakal ngomong babagan Pabrik. Kita bakal ngrembug karo sampeyan apa masalah ditanggulangi nggunakake cithakan iki, lan katon ing conto carane pabrik mbantu mbukak warung kopi. Lan aku uga bakal menehi 5 langkah prasaja kanggo nggawe pabrik. Pola Desain Pabrik - 1Supaya ana ing kaca sing padha karo kabeh wong lan gampang ngerteni inti, sampeyan kudu ngerti topik ing ngisor iki:
  • Pusaka ing Jawa
  • Narrowing lan ngembangaken 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 prasaja, nanging uga ora rumit. Kita kabeh ngerti manawa kanggo nggawe obyek anyar kita kudu nggunakake file new. Lan iku uga koyone sing ana apa-apa kanggo ngatur kene, nanging iki ora supaya. Kesulitan bisa uga muncul nalika aplikasi kita duwe kelas tartamtu sing duwe akeh turunan, lan kudu nggawe conto kelas tartamtu gumantung ing sawetara kahanan. Pabrik minangka pola desain sing mbantu ngatasi masalah nggawe obyek sing beda-beda gumantung saka sawetara kondisi. Abstrak, ta? Luwih spesifik lan kajelasan bakal katon nalika ndeleng conto ing ngisor iki.

Kita nggawe macem-macem jinis kopi

Ayo kita ngomong yen kita pengin ngotomatisasi warung kopi. Kita kudu sinau carane nyiyapake macem-macem jinis kopi. Kanggo nindakake iki, ing aplikasi kita, kita bakal nggawe kelas kopi lan turunan: Americano, cappuccino, espresso, latte - jinis kopi sing bakal disiapake. Ayo miwiti karo kelas kopi umum:
public class Coffee {
    public void grindCoffee(){
        // перемалываем кофе
    }
    public void makeCoffee(){
        // делаем кофе
    }
    public void pourIntoCup(){
        // наливаем в чашку
    }
}
Sabanjure, ayo nggawe ahli waris:
public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
Pelanggan bakal pesen sawetara jinis kopi, lan informasi iki kudu dikirim menyang program kasebut. Iki bisa ditindakake kanthi cara sing beda-beda, contone nggunakake String. Nanging paling cocog kanggo tujuan kasebut enum. Ayo nggawe enumlan nemtokake jinis kopi sing ditampa pesenan:
public enum CoffeeType {
    ESPRESSO,
    AMERICANO,
    CAFFE_LATTE,
    CAPPUCCINO
}
Apik, 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("Вот ваш кофе! Спасибо, приходите еще!");
        return coffee;
    }
}
Cara kasebut orderCoffeebisa dipérang dadi rong komponen:
  1. Nggawe conto kopi tartamtu ing blok switch-case. Ing kene apa sing ditindakake Pabrik yaiku nggawe jinis tartamtu gumantung saka kahanan.
  2. Preparation dhewe mecah, masak lan pour menyang tuwung.
Sing penting kanggo ngerti yen sampeyan kudu ngowahi cara kasebut ing mangsa ngarep:
  1. Algoritma preparation dhewe (grinding, masak lan pour menyang tuwung) bakal tetep ora diganti (paling kita ngarep-arep supaya).
  2. Nanging macem-macem kopi bisa diganti. Muga-muga kita bakal miwiti nggawe mocha.. Mocha.. Mokkachi... Gusti mberkahi dheweke, jinis kopi anyar.
Kita wis bisa nganggep yen ing mangsa ngarep, kanthi kemungkinan tingkat tartamtu, kita kudu ngowahi cara kasebut, menyang blok switch-case. Bisa uga ing warung kopi kita, metode kasebut orderCoffeeora mung minangka papan kanggo nggawe macem-macem jinis kopi. Mula, owah-owahan kudu ditindakake ing sawetara papan. 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 bakal bisa nggunakake maneh logika nggawe kopi ing papan liya.
  2. Yen sawetara owah-owahan, kita ora kudu ngowahi kode ing endi wae ing ngendi nggawe kopi bakal digunakake. Bakal cukup kanggo ngganti kode mung ing sak panggonan.
Ing tembung liyane, iku wektu kanggo Cut mudhun pabrik.

Kita sawing pabrik pisanan kita

Kanggo nindakake iki, ayo 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 wis nerapake pola desain Pabrik kanthi bentuk sing paling gampang. Senajan kabeh bisa dadi luwih prasaja yen cara digawe createCoffeestatis. Nanging banjur kita bakal kelangan rong kemungkinan:
  1. Warisan saka SimpleCoffeeFactorylan nimpa createCoffee.
  2. Ngleksanakake implementasi pabrik sing dibutuhake ing kelas kita.
Ngomong babagan implementasine. Kita kudu bali menyang warung lan ngleksanakake pabrik nggawe kopi.

Pengenalan pabrik menyang warung kopi

Ayo nulis ulang kelas warung kopi kita 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("Вот ваш кофе! Спасибо, приходите еще!");
        return coffee;
    }
}
Agung. Saiki ayo nyoba njlentrehake kanthi skematis lan ringkes struktur pola desain Pabrik.

5 langkah kanggo mbukak pabrik dhewe

Langkah 1. Ing program sampeyan duwe kelas karo sawetara keturunan, kaya ing gambar ing ngisor iki: Pola Desain Pabrik - 2Langkah 2. Sampeyan nggawe kelas enumsing sampeyan nemtokake variabel enum kanggo saben kelas turunan:
enum CatType {
    LION,
    TIGER,
    BARSIK
}
Langkah 3. Sampeyan mbangun pabrik sampeyan. Sampeyan nelpon MyClassFactory, kode ing ngisor iki:
class CatFactory {}
Langkah 4. Sampeyan nggawe cara ing pabrik createMyClasssing njupuk variabel - enum MyClassType. Kode ing ngisor iki:
class CatFactory {
    public Cat createCat(CatType type) {

    }
}
Langkah 5. Sampeyan nulis pemblokiran ing awak saka cara switch-casekang iterate liwat kabeh nilai enum lan nggawe Kayata saka kelas cocog karo enumNilai:
class CatFactory {
        public Cat createCat(CatType type) {
            Cat cat = null;

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

            return cat;
        }
    }
Kaya bos.

Carane nglatih

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 anonim, sampeyan begja. Dina iki sampeyan bisa ngaso.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION