CodeGym/Java Blog/Acak/Pola desain pabrik
John Squirrels
Level 41
San Francisco

Pola desain pabrik

Dipublikasikan di grup Acak
anggota
Hai teman! Hari ini kita akan terus mempelajari pola desain. Dalam pelajaran ini, kita akan berbicara tentang pabrik. Kami akan membahas masalah yang dipecahkan oleh pola ini dan melihat contoh bagaimana sebuah pabrik dapat membantu Anda membuka kedai kopi. Selain itu, saya akan memberi Anda 5 langkah sederhana untuk membuat pabrik. Pola desain pabrik - 1 Untuk memastikan bahwa kita semua berada pada gelombang yang sama dan Anda akan segera memahami konsep ini, Anda harus terbiasa dengan topik berikut:
  • Warisan di Jawa
  • Penyempitan dan pelebaran tipe referensi di Jawa
  • Interaksi antara kelas dan objek yang berbeda.

Apa itu pabrik?

Pola desain pabrik memungkinkan Anda mengontrol pembuatan objek. Proses pembuatan objek baru tidaklah super sederhana, tetapi juga tidak terlalu rumit. Kita semua tahu bahwa kita membutuhkan newoperator untuk membuat objek baru. Mungkin sepertinya tidak ada yang bisa dikendalikan di sini, tapi itu tidak benar. Misalkan aplikasi kita memiliki kelas tertentu yang memiliki banyak keturunan. Kesulitan dapat muncul ketika diperlukan untuk membuat instance dari kelas tertentu tergantung pada kondisi tertentu. Pabrik adalah pola desain yang membantu menyelesaikan masalah pembuatan berbagai objek tergantung pada kondisi tertentu . Bagaimana itu untuk konsep abstrak? Ini akan menjadi lebih jelas dan lebih spesifik ketika kita melihat contoh di bawah ini.

Mari kita siapkan berbagai jenis kopi

Misalkan kita ingin mengotomatiskan kedai kopi. Kami perlu mengajarkan program kami cara membuat berbagai jenis kopi. Untuk itu, kita akan membuat kelas kopi dan beberapa kelas turunan untuk mewakili jenis kopi yang akan kita siapkan: Americano, cappucino, espresso, dan latte. Mari kita mulai dengan 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
    }
}
Selanjutnya, kita akan membuat kelas anaknya:
public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
Pelanggan kami dapat memesan semua jenis kopi. Perintah mereka harus diteruskan ke program. Ini dapat dilakukan dengan berbagai cara, misalnya menggunakan String. Tapi yang enumterbaik untuk ini. Kami akan membuat enumdan menentukan bidang enum yang sesuai dengan jenis kopi yang dapat dipesan:
public enum CoffeeType {
    ESPRESSO,
    AMERICANO,
    CAFFE_LATTE,
    CAPPUCCINO
}
Besar. Sekarang mari 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("Here's your coffee! Thanks! Come again!");
        return coffee;
    }
}
Metode ini orderCoffeedapat dibagi menjadi dua bagian:
  1. Pembuatan contoh kopi tertentu dalam sebuah switchpernyataan. Di sinilah pabrik melakukan apa yang dilakukannya — membuat jenis tertentu tergantung pada kondisi.
  2. Persiapan — ini adalah penggilingan, pembuatan bir, dan penuangan ke dalam cangkir.
Inilah yang penting untuk diketahui jika Anda perlu membuat perubahan pada metode di masa mendatang:
  1. Langkah-langkah yang terlibat dalam persiapan itu sendiri (menggiling, menyeduh, dan menuangkan ke dalam cangkir) tidak akan berubah (setidaknya kami mengandalkan ini).
  2. Tapi bermacam-macam kopi bisa berubah. Mungkin kita akan mulai membuat mocha... Frappu... Mochacci... Terserah, kopi jenis baru.
Kita sudah cukup yakin bahwa di masa mendatang kita harus membuat perubahan pada pernyataan metode switch. Mungkin juga di kedai kopi kita orderCoffeemetode ini bukan satu-satunya tempat di mana kita akan membuat berbagai jenis kopi. Akibatnya, perubahan harus dilakukan di beberapa tempat. Anda mungkin sudah mengerti apa yang saya maksud. Kita perlu melakukan refactor. Pindahkan blok yang bertanggung jawab untuk membuat kopi ke kelas terpisah karena dua alasan:
  1. Kita dapat menggunakan kembali logika pembuatan kopi di tempat lain.
  2. Jika bermacam-macam berubah, kita tidak perlu mengedit kode di mana pun kopi dibuat. Cukup mengubah kode kita di satu tempat saja.
Dengan kata lain, waktunya telah tiba untuk mendirikan pabrik.

Menyiapkan pabrik pertama kami

Untuk melakukan ini, kami akan membuat kelas baru yang hanya akan 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 mengimplementasikan pola desain pabrik dalam bentuknya yang paling sederhana (hampir). Itu bisa lebih sederhana jika kita membuat metodenya createCoffeestatis. Tapi kemudian kita akan kehilangan dua kemampuan:
  1. Kemampuan untuk mewarisi SimpleCoffeeFactorydan mengganti createCoffeemetode.
  2. Kemampuan untuk menambahkan implementasi pabrik yang diperlukan ke kelas kami.
Omong-omong, berbicara tentang implementasi... Kita perlu kembali ke kedai kopi dan menambahkan pabrik pembuat kopi kita.

Menambahkan pabrik ke kedai kopi

Mari menulis ulang kelas kedai kopi 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("Here's your coffee! Thanks! Come again!");
        return coffee;
    }
}
Bagus sekali. Sekarang kami akan memberikan gambaran singkat tentang struktur umum dari pola desain pabrik.

5 langkah membuka pabrik sendiri

Langkah 1. Program Anda memiliki kelas dengan beberapa keturunan, seperti pada diagram di bawah ini: Pola desain pabrik - 2Langkah 2. Anda membuat enumfield untuk setiap kelas anak:
enum CatType {
    LION,
    TIGER,
    FLUFFY
}
Langkah 3. Bangun pabrik Anda. Sebut saja CatFactory. Ini kodenya:
class CatFactory {}
Langkah 4. Di pabrik Anda, buat createCatmetode yang menggunakan CatTypeargumen. Ini kodenya:
class CatFactory {
    public Cat createCat(CatType type) {

    }
}
Langkah 5. Di badan metode, tulis switchpernyataan yang menghitung bidang enum dan membuat instance kelas yang sesuai dengan enumnilai yang diteruskan:
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;
        }
    }
Sekarang Anda dapat menjalankan pabrik seperti bos. :)

Bagaimana cara berlatih

Membaca itu baik, menulis kode bahkan lebih baik. Jika nama Anda memiliki jumlah huruf genap, cobalah membuat pizzeria virtual Anda sendiri. Jika nama Anda memiliki jumlah huruf ganjil, cobalah membuat bar sushi virtual. Jika Anda tidak memiliki nama, Anda beruntung. Hari ini Anda bisa bersantai.
Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar