Sobes.tech
Middle+

Factory Builder tasarım deseni nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Factory Builder deseni veya daha doğrusu Factory Method ile Builder kombinasyonu, karmaşık nesnelerin oluşturulmasını geliştiren iki desenin birleşimidir.

Factory Method, bir nesne oluşturmak için arayüz tanımlar, ancak hangi sınıfın örneklendirileceğine alt sınıfların karar vermesine izin verir. Nesne oluşturma sorumluluğunu alt sınıflara devreder.

Builder, karmaşık bir nesnenin yapımını onun temsilinden ayırır, böylece aynı yapım süreci farklı temsiller oluşturabilir. Bir nesneyi adım adım inşa etmeye olanak tanır ve metod zinciri kullanır.

Bu desenlerin birleşimi, genellikle karmaşık nesnenin birkaç varyantını oluşturmanın gerektiği senaryolarda görülür. Factory Method, hangi Builder türünün kullanılacağını belirler, ardından Builder, bu tür nesneyi farklı konfigürasyonlarla nasıl oluşturulacağını üstlenir.

Kullanım örneği: Karmaşık başlatma gerektiren nesne hiyerarşisine sahip olduğunuzda ve bu nesneleri farklı konfigürasyonlarla oluşturmak istediğinizde.

Tipik etkileşim yapısı:

  • Fabrika: Giriş parametrelerine veya kendi türüne bağlı olarak belirli bir Builder örneği döndüren bir metoda sahiptir.
  • Builder: Karmaşık nesnenin parametrelerini adım adım ayarlamak için metodlara ve hazır nesneyi döndüren build() adlı son metoda sahiptir.
  • Ürün: Builder tarafından oluşturulan karmaşık nesne.

Avantajlar:

  • Karmaşık nesnelerin oluşturulmasında kodun okunabilirliği ve yönetilebilirliği artar.
  • Aynı tür nesne için farklı konfigürasyonlar oluşturma esnekliği sağlar.
  • Nesne oluşturma mantığını, temsilinden ayırır.
  • Yeni ürün tipleri (Factory Method kullanarak) veya yeni yapım yöntemleri (Builder kullanarak) eklemeyi kolaylaştırır.

Dezavantajlar:

  • Projede sınıf sayısında artış.
  • Basit nesneler için gereksiz olabilir.

Örnek (sözde kod):

// Ürün
class ComplexObject {
    private String partA;
    private int partB;

    // özel yapıcı
    private ComplexObject(String partA, int partB) {
        this.partA = partA;
        this.partB = partB;
    }

    // İç içe Builder sınıfı
    public static class Builder {
        private String partA;
        private int partB;

        public Builder setPartA(String partA) {
            this.partA = partA;
            return this;
        }

        public Builder setPartB(int partB) {
            this.partB = partB;
            return this;
        }

        public ComplexObject build() {
            return new ComplexObject(partA, partB);
        }
    }
}

// Fabrika, belirli bir Builder döner
class ComplexObjectFactory {
    public static ComplexObject.Builder createDefaultBuilder() {
        return new ComplexObject.Builder()
                .setPartA("defaultA")
                .setPartB(10);
    }

    public static ComplexObject.Builder createSpecialBuilder() {
        return new ComplexObject.Builder()
                .setPartA("specialA")
                .setPartB(50);
    }
}

// Kullanım:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();