Middle
Yapılandırıcı tasarım deseninden bahsedin.
sobes.tech yapay zeka
AI'dan gelen yanıt
Tasarım deseni "Builder" (Yapıcı), karmaşık nesneleri adım adım oluşturmayı sağlayan bir yaratıcı desendir. Karmaşık bir nesnenin yapım sürecini, onun temsilinden ayırır, böylece aynı yapım süreci farklı temsiller oluşturabilir.
Ana bileşenler:
- Yapıcı (Builder): Karmaşık bir nesnenin parçalarını oluşturmak için yöntemleri tanımlayan arayüz veya soyut sınıf.
- Somut Yapıcı (Concrete Builder): Yapıcı arayüzünü uygular ve nesnenin parçalarını oluşturmak için somut bir uygulama sağlar. Ara sonuçları saklar ve tamamlanmış nesneyi almak için bir yöntem sağlar.
- Yönetici (Director): İsteğe bağlı. Nesnenin oluşturulması için yapıcı metodlarının çağrı sırasını belirler. Somut yapıcıları bilmez.
- Ürün (Product): Yapıcı tarafından oluşturulan karmaşık nesne.
Uygulamalar:
- Nesne oluşturma süreci karmaşık ve çok sayıda isteğe bağlı adım içerdiğinde.
- Aynı yapım sürecini kullanarak farklı temsiller oluşturulması gerektiğinde.
- Nesne yapıcısının çok sayıda parametreye sahip olduğu durumlarda.
Go dilinde örnek:
// Ürün - karmaşık nesne
type Product struct {
PartA string
PartB string
PartC string
}
// Yapıcı - arayüz
type Builder interface {
BuildPartA()
BuildPartB()
BuildPartC()
GetProduct() *Product
}
// ConcreteBuilder - somut yapıcı
type ConcreteBuilder struct {
product *Product
}
func NewConcreteBuilder() *ConcreteBuilder {
return &ConcreteBuilder{product: &Product{}}
}
func (cb *ConcreteBuilder) BuildPartA() {
cb.product.PartA = "A Parçası oluşturuldu"
}
func (cb *ConcreteBuilder) BuildPartB() {
cb.product.PartB = "B Parçası oluşturuldu"
}
func (cb *ConcreteBuilder) BuildPartC() {
cb.product.PartC = "C Parçası oluşturuldu"
}
func (cb *ConcreteBuilder) GetProduct() *Product {
return cb.product
}
// Yönetici - (isteğe bağlı)
type Director struct {
builder Builder
}
func NewDirector(builder Builder) *Director {
return &Director{builder: builder}
}
func (d *Director) Construct() {
d.builder.BuildPartA()
d.builder.BuildPartB()
d.builder.BuildPartC()
}
// Kullanım
// concreteBuilder := NewConcreteBuilder()
// director := NewDirector(concreteBuilder)
// director.Construct()
// product := concreteBuilder.GetProduct()
// fmt.Printf("Ürün oluşturuldu: %+v\n", product)
Avantajlar:
- Nesnenin yapım kodunu müşteri kodundan izole eder.
- Ürünün iç temsilini değiştirmeye olanak tanır, müşteri kodunu değiştirmeden.
- Nesnenin adım adım inşasını sağlar.
- Çok parametreli nesnelerin oluşturulmasını basitleştirir.
Dezavantajlar:
- Oluşturma kodunun (sınıflar/arabellekler) sayısını artırır.
- Basit nesneler için gereksiz olabilir.