JavaRush /Java Blog /Random-ID /Pola desain pabrik

Pola desain pabrik

Dipublikasikan di grup Random-ID
Hai teman! Hari ini kami akan terus mempelajari pola desain bersama Anda. Pada kuliah kali ini kita akan membahas tentang Pabrik. Kami akan berdiskusi dengan Anda masalah apa yang dapat diselesaikan menggunakan templat ini, dan melihat contoh bagaimana pabrik membantu membuka kedai kopi. Dan saya juga akan memberikan 5 langkah sederhana untuk membuat pabrik. Pola Desain Pabrik - 1Agar memiliki pemikiran yang sama dengan semua orang dan dengan mudah memahami esensinya, Anda harus memahami topik-topik berikut:
  • Warisan di Jawa
  • Mempersempit dan memperluas tipe referensi di Java
  • Interaksi antara kelas dan objek yang berbeda

Apa itu Pabrik?

Pola desain Pabrik memungkinkan Anda mengontrol pembuatan objek. Proses pembuatan objek baru tidaklah sesederhana itu, namun juga tidak terlalu rumit. Kita semua tahu bahwa untuk membuat objek baru kita harus menggunakan new. Dan tampaknya tidak ada yang perlu dikelola di sini, tetapi kenyataannya tidak demikian. Kesulitan mungkin muncul ketika aplikasi kita memiliki kelas tertentu yang memiliki banyak turunan, dan perlu membuat instance kelas tertentu tergantung pada kondisi tertentu. Pabrik adalah pola desain yang membantu memecahkan masalah pembuatan objek yang berbeda tergantung pada kondisi tertentu. Abstrak, bukan? Kekhususan dan kejelasan lebih lanjut akan tampak ketika kita melihat contoh di bawah ini.

Kami membuat berbagai jenis kopi

Katakanlah kita ingin mengotomatisasi kedai kopi. Kita perlu belajar cara menyiapkan berbagai jenis kopi. Untuk melakukan ini, dalam aplikasi kita, kita akan membuat kelas kopi dan turunannya: Americano, cappuccino, espresso, latte - jenis kopi yang akan kita siapkan. Mari kita mulai dengan kelas kopi umum:
public class Coffee {
    public void grindCoffee(){
        // перемалываем кофе
    }
    public void makeCoffee(){
        // делаем кофе
    }
    public void pourIntoCup(){
        // наливаем в чашку
    }
}
Selanjutnya, mari kita buat ahli warisnya:
public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
Pelanggan kami akan memesan beberapa jenis kopi, dan informasi ini perlu diteruskan ke program. Hal ini dapat dilakukan dengan berbagai cara, misalnya dengan menggunakan String. Tapi ini paling cocok untuk tujuan ini enum. Mari kita buat enumdan tentukan di dalamnya jenis kopi yang kami terima pesanannya:
public enum CoffeeType {
    ESPRESSO,
    AMERICANO,
    CAFFE_LATTE,
    CAPPUCCINO
}
Bagus, sekarang mari kita tulis kode untuk kedai 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;
    }
}
Metode ini orderCoffeedapat dibagi menjadi dua komponen:
  1. Membuat instance kopi tertentu dalam satu blok switch-case. Di sinilah yang dilakukan Pabrik adalah pembuatan tipe tertentu tergantung kondisi.
  2. Persiapannya sendiri adalah menggiling, memasak dan menuangkan ke dalam cangkir.
Hal yang penting untuk diketahui jika Anda perlu melakukan perubahan pada metode di masa mendatang:
  1. Algoritme persiapannya sendiri (menggiling, memasak, dan menuangkan ke dalam cangkir) tidak akan berubah (setidaknya kami berharap demikian).
  2. Namun jenis kopinya bisa berubah. Mungkin kita akan mulai membuat mocha.. Mocha.. Mokkachi... Alhamdulillah, kopi jenis baru.
Kita sudah dapat berasumsi bahwa di masa depan, dengan tingkat kemungkinan tertentu, kita harus melakukan perubahan pada metode, pada blok switch-case. Mungkin juga di kedai kopi kita metode tersebut orderCoffeebukan satu-satunya tempat kita membuat berbagai jenis kopi. Oleh karena itu, perubahan harus dilakukan di beberapa tempat. Anda mungkin sudah mengerti maksud saya. Kita perlu melakukan refaktorisasi. Pindahkan blok yang bertanggung jawab membuat kopi ke kelas terpisah karena dua alasan:
  1. Kita akan bisa menggunakan kembali logika menciptakan kopi di tempat lain.
  2. Jika rentangnya berubah, kita tidak perlu mengedit kode di mana pun kreasi kopi akan digunakan. Mengubah kode saja sudah cukup di satu tempat.
Dengan kata lain, sudah waktunya untuk menebang pabrik.

Kami sedang menggergaji pabrik pertama kami

Untuk melakukan ini, mari buat kelas baru yang hanya bertanggung jawab untuk membuat instance kelas kopi yang diperlukan:
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;
    }
}
Selamat! Kami baru saja menerapkan pola desain Pabrik dalam bentuk yang paling sederhana. Meskipun semuanya bisa menjadi lebih sederhana jika metodenya dibuat createCoffeestatis. Namun kita akan kehilangan dua kemungkinan:
  1. Mewarisi dari SimpleCoffeeFactorydan menimpa createCoffee.
  2. Terapkan implementasi pabrik yang diperlukan di kelas kami.
Berbicara tentang implementasi. Kita perlu kembali ke kedai kopi dan mengimplementasikan pabrik pembuatan kopi kita.

Pengenalan pabrik menjadi kedai kopi

Mari kita menulis ulang kelas kedai kopi kita menggunakan 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;
    }
}
Besar. Sekarang mari kita coba mendeskripsikan secara skematis dan ringkas struktur pola desain Pabrik.

5 langkah untuk membuka pabrik Anda sendiri

Langkah 1. Dalam program Anda, Anda memiliki kelas dengan beberapa turunan, seperti pada gambar di bawah ini: Pola Desain Pabrik - 2Langkah 2. Anda membuat kelas enumdi mana Anda mendefinisikan variabel enum untuk setiap kelas turunan:
enum CatType {
    LION,
    TIGER,
    BARSIK
}
Langkah 3. Anda membangun pabrik Anda. Sebut saja MyClassFactory, kodenya di bawah ini:
class CatFactory {}
Langkah 4. Anda membuat metode di pabrik Anda createMyClassyang menggunakan variabel - enum MyClassType. Kode di bawah ini:
class CatFactory {
    public Cat createCat(CatType type) {

    }
}
Langkah 5. Anda menulis sebuah blok di badan metode switch-casetempat Anda melakukan iterasi melalui semua nilai enum dan membuat instance kelas yang sesuai dengan enumnilai tersebut:
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;
        }
    }
Seperti Bos.

Bagaimana cara melatih

Membaca itu bagus, menulis kode lebih baik lagi. Jika nama Anda memiliki jumlah huruf genap, cobalah membuat restoran pizza virtual Anda sendiri. Jika nama Anda memiliki jumlah huruf ganjil, cobalah membuat bar sushi virtual. Jika Anda anonim, Anda beruntung. Hari ini kamu bisa istirahat.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION