Bagaimanakah anda mengingati perbezaan antara corak Kilang Abstrak dan corak Kaedah Kilang dalam corak reka bentuk?


Jawapan 1:

Corak reka bentuk kilang:

  • Ia berada di bawah corak Reka Cipta Penciptaan. Corak bangunan mengatakan bahawa penciptaan objek akan dikendalikan oleh kelas lain menggunakan jenis input.

Kelebihan:

  • Ia membolehkan gandingan longgar.

Kapan menggunakan Corak Reka Bentuk Kilang?

  • Corak reka bentuk kilang digunakan apabila kita mempunyai kelas besar dengan pelbagai subkelompok dan berdasarkan input, kita perlu memulangkan salah satu subkelompok. Contoh: Jika sebuah restoran menyajikan makanan Veg, Makanan tanpa makanan, dan makanan Itali. Rawat VegFood, NonVegFood, dan ItalianFood sebagai tiga kelas yang superclass adalah Food.Jika pelanggan meminta "Veg" maka kaedah Kilang akan mengembalikan kelas "VegFood".

Contoh:

Langkah 1: Buat kelas abstrak "Makanan" yang mempunyai dua pembolehubah yang dipanggil "billPerPerson" dan "item".

 makanan kelas abstrak awam

{
    bil berganda terlindungPerPerson;
    item Tetapkan yang dilindungi;

    Makanan awam (bil bergandaPerPerson)

    {
        this.billPerPerson = billPerPerson;
        this.items = new HashSet <> ();
    }

    getBill double public ()

    {
        kembali billPerPerson;

    }

    set DapatkanItem awam ()
    {
        barang yang dikembalikan;
    }
}

Langkah 2: Buat kelas konkrit yang memanjangkan kelas abstrak "Makanan"

VegFood kelas awam memanjangkan Makanan
{
    VegFood awam ()

    {
        super (100);
        items.add ("Idly");
        items.add ("Dosa");
        items.add ("Vada");
    }
}

NonVegFood kelas awam memanjangkan Makanan
{
    NonVegFood awam ()
    {
        super (120);
        items.add ("Biriyani");
        items.add ("Chicken 65");
    }
}

Langkah 3: Buat FoodServer yang merupakan kelas Kilang untuk membuat objek untuk konkrit berdasarkan maklumat:

FoodServer kelas awam

{
    makanan statik awam getFood (String foodType)

    {
        jika (foodType.equals ("veg"))
        {
            kembali VegFood baru ();
        }
        lain jika (foodType.equals ("non veg"))
        {
            kembali NonVegFood baru ();
        }
        lain
        {
            System.out.println ("Kami tidak berkhidmat" + foodType);
            pulangan null;
        }
    }
}

Langkah 4: Kelas utama "Pelanggan" untuk mendapatkan Makanan yang diperlukan berdasarkan jenis makanan.

pelanggan kelas awam
{
    public static void main (String [] args)
    {
        Pelanggan makanan1Food = FoodServer.getFood ("sayur");
        System.out.println ("Customer1");
        System.out.println ("Items:" + customer1Food.getItems (). ToString ());
        System.out.println ("Bill:" + customer1Food.getBill ());
        Makanan pelanggan2Food = FoodServer.getFood ("bukan sayur");
        System.out.println ("Customer1");
        System.out.println ("Items:" + customer2Food.getItems (). ToString ());
        System.out.println ("Bill:" + customer2Food.getBill ());
    }
}

Corak Rekaan Kilang Abstrak:

  • Ia berada di bawah Corak Reka Cipta Penciptaan. Ia menyediakan antara muka untuk mewujudkan keluarga objek berkaitan atau bergantung tanpa menentukan kelas konkrit mereka. Corak kilang Abstrak adalah kilang super yang akan mengembalikan Kilang yang terbaik berdasarkan input. Ia bertindak sebagai kilang kilang Ia menggambarkan pelanggan dari mengetahui kilang mana yang akan dikembalikan.

Contoh kehidupan sebenar:

  • Pertimbangkan sebuah kilang besar yang mengeluarkan sabun. Kilang itu tidak akan mengeluarkan semua perkara yang diperlukan untuk sabun. Ia akan mempunyai banyak kilang yang akan menghasilkan "bar sabun", "pembungkus sabun", dan lain-lain. Semua barang akan dipasang oleh kilang utama.

Bila menggunakan Corak Rekaan Kilang Abstrak?

  • Pelanggan mestilah bebas daripada bagaimana objek dicipta dan bagi mana objek kelas dicipta. Ini berguna apabila sesuatu objek perlu diwujudkan dari keluarga kelas.

NOTA: Ini mungkin mengelirukan jadi harap lihat video yang saya telah tertanam pada akhir halaman ini.

Contoh:

Langkah 1:

  • Buat Interface yang dipanggil "Kursus".
Kursus antara muka umum
{
    public String getCourseName ();
}

Langkah 2:

  • Buat kelas konkrit yang melaksanakan Antara Muka "Kursus".
Kursus ProgrammingCourse kelas awam melaksanakan Kursus
{
    @Orrride
    public String getCourseName ()
    {
       kembali "Java";
    }
}

Kursus NonProgrammingCourse kelas awam melaksanakan Kursus
{
    @Orrride
    public String getCourseName ()
    {
        kembali "DSP";
    }
}

Langkah 3:

  • Buat Interface yang dipanggil "Sumber".
sumber muka umum
{
    awam String getSourceName ();
}

Langkah 4:

  • Buat kelas konkrit yang melaksanakan Interface "Sumber".
sumber awam Offline mengimplementasikan Sumber
{
    @Orrride
    awam String getSourceName ()
    {
        kembali "Buku";
    }
}

sumber awam Online alat Sumber
{
    @Orrride
    awam String getSourceName ()
    {
        kembali "YouTube";
    }
}

Langkah 5:

  • Buat kelas abstrak "SourceCourseFactory".
kelas abstrak sumber SourceCourseFactory
{
    abstrak awam Sumber getSource (String sourceType);
    
    public abstract GetCourse kursus (String courseType);
}

Langkah 6:

  • Buat Kelas kilang "CourseFactory" yang memanjangkan "SourceCourseFactory"
CourseFactory kelas awam memanjangkan SumberCourseFactory
{
    @Orrride
    Sumber awam getSource (String sourceType)
    {
        pulangan null;
    }

    @Orrride
    getCourse Kursus awam (Kursus rentetanType)
    {
        jika (courseType.equalsIgnoreCase ("pengaturcaraan"))
        {
            kembali ProgrammingCourse baru ();
        }
        lain jika (courseType.equalsIgnoreCase ("bukan pengaturcaraan"))
        {
            pulangkan NonProgrammingCourse baru ();
        }
        lain
        {
            pulangan null;
        }
    }
}

Langkah 7:

  • Buat kelas kilang "SourceFactory" yang memanjangkan "SourceCourseFactory"
Sumber awam SourceFactory memanjangkan SourceCourseFactory
{

    @Orrride
    Sumber awam getSource (String sourceType)
    {
        jika (sourceType.equalsIgnoreCase ("dalam talian"))
        {
            kembali Online baru ();
        }
        lain jika (sourceType.equalsIgnoreCase ("offline"))
        {
            kembali baru Offline ();
        }
        lain
        {
            pulangan null;
        }
    }

    @Orrride
    getCourse Kursus awam (Kursus rentetanType)
    {
       pulangan null;
    }
    
}

Langkah 8:

  • Buat kelas utama yang memanggil kelas Kilang Abstrak untuk mendapatkan objek kelas Kilang sebenar dan kemudian menggunakan objek tersebut untuk melaksanakan operasi lain yang lain.
 ExampleMain kelas awam
{
    public static void main (String [] args)
    {
        SourceCourseFactory course = FactoryCreator.getSourceCourseFactory ("course");

        System.out.println (course.getCourse ("pengaturcaraan"). GetCourseName ());

        SourceCourseFactory source = FactoryCreator.getSourceCourseFactory ("source");
        System.out.println (source.getSource ("online"). GetSourceName ());

    }
}