cevap 1:

Fabrika Tasarım Desen:

  • Creational Design Pattern (Yaratıcı Tasarım Deseni) altına girer.Fabrika deseni, nesne oluşturmanın giriş türü kullanılarak başka bir sınıf tarafından işleneceğini söylüyor.

Avantajları:

  • Gevşek bağlantıya izin verir.

Fabrika Tasarım Deseni ne zaman kullanılır?

  • Fabrika tasarım deseni, birden fazla alt sınıfa sahip bir süper sınıfa sahip olduğumuz ve girdiye dayanarak kullanıldığında, alt sınıftan birini döndürmemiz gerekir. VegFood, NonVegFood ve ItalianFood'u, üst sınıfı Food olan üç sınıf olarak değerlendirin. Bir müşteri "Veg" isterse, Factory yöntemi "VegFood" sınıfını döndürür.

Misal:

Adım 1: "billPerPerson" ve "items" adlı iki değişkeni içeren soyut bir "Food" sınıfı oluşturun.

 kamu soyut sınıf Gıda

{
    korumalı çift fatura
    korumalı Set öğeleri;

    kamu Gıda (çift faturaPerPerson)

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

    genel çift getBill ()

    {
        dönüş billPerPerson;

    }

    public Set getItems ()
    {
        ürün iade;
    }
}

2. Adım: Soyut "Gıda" sınıfını genişleten somut sınıflar oluşturun

kamu sınıfı VegFood Gıda'yı genişletiyor
{
    genel VegFood ()

    {
        Süper (100) olup;
        resi ( "tembel tembel");
        resi ( "Dosa");
        resi ( "Vada");
    }
}

kamu sınıfı NonVegFood Gıda genişletir
{
    kamu NonVegFood ()
    {
        Süper (120);
        resi ( "Biriyani");
        item.add ("Tavuk 65");
    }
}

Adım 3: Bilgiye dayalı olarak beton için bir nesne oluşturmak için Factory sınıfı olan bir FoodServer oluşturun:

kamu sınıfı FoodServer

{
    public static Food getFood (String foodType)

    {
        if (foodType.equals ("veg"))
        {
            yeni VegFood () döndür;
        }
        else if (foodType.equals ("sebze olmayan"))
        {
            yeni NonVegFood () döndür;
        }
        Başka
        {
            System.out.println ("Hizmet vermiyoruz" + foodType);
            null değerini döndür;
        }
    }
}

Adım 4: Ana sınıfı "Müşteri" gıda türüne göre gerekli Gıda almak için.

kamu sınıfı müşteri
{
    public static void main (Dize [] argümanları)
    {
        Gıda müşterisi1Food = FoodServer.getFood ("veg");
        ( "Customer1") System.out.println;
        System.out.println ("Öğeler:" + customer1Food.getItems (). ToString ());
        System.out.println ("Bill:" + customer1Food.getBill ());
        Yemek customer2Food = FoodServer.getFood ("sebze olmayan");
        ( "Customer1") System.out.println;
        System.out.println ("Öğeler:" + customer2Food.getItems (). ToString ());
        System.out.println ("Bill:" + customer2Food.getBill ());
    }
}

Soyut Fabrika Tasarım Desen:

  • Yaratıcı Tasarım Deseni altına girer.Altın sınıflarını belirtmeden ilgili veya bağımlı nesnelerin ailelerini oluşturmak için bir arabirim sağlar. Soyut Fabrika desenleri, girdiye dayanarak en iyi Fabrikayı döndürecek süper bir fabrikadır. .Müşteri, hangi fabrikanın iade edileceğini bilmekten soyutlar.

Gerçek Hayat Örneği:

  • Sabun üreten büyük bir fabrikayı düşünün.Bu fabrika sabun için gerekli olan her şeyi üretmeyecektir. "Sabun çubuğu", "sabun sargısı" ve benzeri birçok alt fabrikaya sahip olacaktır. ana fabrika tarafından.

Abstract Factory Design Pattern ne zaman kullanılır?

  • İstemci, nesnelerin nasıl oluşturulduğundan ve hangi sınıf nesnesinin oluşturulduğundan bağımsız olmalıdır.Bu, bir sınıf ailesinden nesne oluşturulması gerektiğinde yararlıdır.

NOT: Kafa karıştırıcı olabilir, bu yüzden lütfen bu sayfanın sonuna yerleştirdiğim videoları izleyin.

Misal:

Aşama 1:

  • "Course" adlı bir arayüz oluşturun.
genel arayüz Kursu
{
    public String getCourseName ();
}

Adım 2:

  • "Ders" Arayüzü uygulayan somut sınıflar oluşturun.
kamu sınıfı Programlama
{
    @Override
    public String getCourseName ()
    {
       dönüş "Java";
    }
}

public class Programlama Dışı Kurslar Kursu
{
    @Override
    public String getCourseName ()
    {
        dönüş "DSP";
    }
}

Aşama 3:

  • "Source" adlı bir arayüz oluşturun.
genel arayüz Kaynak
{
    public String getSourceName ();
}

Adım4:

  • "Kaynak" Arayüzü uygulayan somut sınıflar oluşturun.
public class Çevrimdışı uygular Kaynak
{
    @Override
    public String getSourceName ()
    {
        dönüş "Kitaplar";
    }
}

public class Online uygular Kaynak
{
    @Override
    public String getSourceName ()
    {
        dönüş "YouTube";
    }
}

Adım 5:

  • Soyut bir sınıf "SourceCourseFactory" oluşturun.
genel soyut sınıf SourceCourseFactory
{
    genel soyut Kaynak getSource (String sourceType);
    
    genel özet Course getCourse (String courseType);
}

6. Adım:

  • "SourceCourseFactory" genişleten bir fabrika sınıfı "CourseFactory" oluşturun
public class CourseFactory, SourceCourseFactory'yi genişletiyor
{
    @Override
    public Source getSource (Dize sourceType)
    {
        null değerini döndür;
    }

    @Override
    public Course getCourse (String courseType)
    {
        if (courseType.equalsIgnoreCase () "programlama")
        {
            yeni ProgrammingCourse () döndür;
        }
        else if (courseType.equalsIgnoreCase ("programlama dışı"))
        {
            return new NonProgrammingCourse ();
        }
        Başka
        {
            null değerini döndür;
        }
    }
}

7. Adım:

  • "SourceCourseFactory" öğesini genişleten bir Factory sınıfı "SourceFactory" oluşturun
public class SourceFactory, SourceCourseFactory'yi genişletiyor
{

    @Override
    public Source getSource (Dize sourceType)
    {
        if (sourceType.equalsIgnoreCase ( "çevrimiçi"))
        {
            yeni Çevrimiçi ();
        }
        else if (sourceType.equalsIgnoreCase ("çevrimdışı"))
        {
            yeni Çevrimdışı ();
        }
        Başka
        {
            null değerini döndür;
        }
    }

    @Override
    public Course getCourse (String courseType)
    {
       null değerini döndür;
    }
    
}

8. Adım:

  • Gerçek Factory sınıfı nesnesini almak için Abstract Factory sınıfını çağıran bir ana sınıf oluşturun ve bu nesneyi diğer işlemleri gerçekleştirmek için kullanır.
 genel sınıf SampleMain
{
    public static void main (Dize [] argümanları)
    {
        SourceCourseFactory course = FactoryCreator.getSourceCourseFactory ("course");

        (Course.getCourse () "programlama" getCourseName ().) System.out.println;

        SourceCourseFactory source = FactoryCreator.getSourceCourseFactory ("kaynak");
        System.out.println (source.getSource ( "çevrimiçi") getSourceName ().);

    }
}