Oluşturucu kalıbı - Builder pattern

oluşturucu desen bir tasarım deseni çeşitli nesne oluşturma sorunlarına esnek bir çözüm sağlamak için tasarlanmıştır. nesne yönelimli programlama. Builder tasarım modelinin amacı, ayrı Karmaşık bir nesnenin temsilinden inşa edilmesi. Biridir Gang of Four tasarım desenleri.

Genel Bakış

Builder tasarım deseni, GoF tasarım modelleri[1] nesne yönelimli yazılımda yinelenen tasarım problemlerinin nasıl çözüleceğini açıklar.

Builder tasarım modeli aşağıdaki gibi sorunları çözer:[2]

  • Bir sınıf (aynı yapım süreci) karmaşık bir nesnenin farklı temsillerini nasıl yaratabilir?
  • Karmaşık bir nesne oluşturmayı içeren bir sınıf nasıl basitleştirilebilir?

Karmaşık bir nesnenin parçalarını doğrudan bir sınıf içinde oluşturmak ve bir araya getirmek esnek değildir. Sınıfa, karmaşık nesnenin belirli bir temsilini yaratma taahhüdü verir ve daha sonra gösterimi sınıftan bağımsız olarak (değiştirmek zorunda kalmadan) değiştirmeyi imkansız kılar.

Builder tasarım modeli, bu tür sorunların nasıl çözüleceğini açıklar:

  • Karmaşık bir nesnenin parçalarını ayrı bir yerde oluşturmayı ve birleştirmeyi kapsülleyin Oluşturucu nesne.
  • Bir sınıf, nesne oluşturmayı bir Oluşturucu doğrudan nesneleri oluşturmak yerine nesne.

Bir sınıf (aynı yapım süreci) farklı Oluşturucu karmaşık bir nesnenin farklı temsillerini oluşturmak için nesneler.

Tanım

Builder tasarım modelinin amacı, karmaşık bir nesnenin yapısını temsilinden ayırmaktır. Bunu yaparak, aynı yapım süreci farklı temsiller yaratabilir.[1]

Avantajlar

Builder modelinin avantajları şunları içerir:[3]

  • Bir ürünün dahili sunumunu değiştirmenize izin verir.
  • Yapım ve temsil için kodu kapsüller.
  • İnşaat sürecinin aşamaları üzerinde kontrol sağlar.

Dezavantajları

Builder modelinin dezavantajları şunları içerir:[3]

  • Her farklı ürün türü için ayrı bir ConcreteBuilder oluşturmayı gerektirir.
  • Oluşturucu sınıflarının değiştirilebilir olmasını gerektirir.
  • Bağımlılık enjeksiyonu daha az desteklenebilir.

Yapısı

UML sınıfı ve sıra diyagramı

Builder tasarım modeli için örnek bir UML sınıfı ve sıra diyagramı.[4]

Yukarıda UML sınıf diyagramı, Yönetmen sınıf oluşturmaz ve birleştirmez ÜrünA1 ve ÜrünB1 doğrudan nesneler. Yönetmen ifade eder Oluşturucu karmaşık bir nesnenin parçalarını oluşturmak (oluşturmak ve birleştirmek) için arayüz, Yönetmen hangi somut sınıfların somutlaştırıldığından bağımsızdır (hangi temsilin yaratıldığı). Oluşturucu1 sınıf uygular Oluşturucu oluşturup birleştirerek arabirim ÜrünA1 ve ÜrünB1 nesneler.
UML sıra diyagramı çalışma zamanı etkileşimlerini gösterir: Yönetmen nesne çağrıları buildPartA () üzerinde Oluşturucu1 yaratan ve birleştiren nesne ÜrünA1 nesne. bundan sonra, Yönetmen aramalar buildPartB () açık Oluşturucu1oluşturur ve birleştiren ÜrünB1 nesne.

Sınıf diyagramı

Oluşturucu Yapısı
Oluşturucu
Nesneler (ürün) oluşturmak için soyut arayüz.
ConcreteBuilder
Builder için uygulama sağlar. O bir diğer nesneleri inşa edebilen nesne. Nesneleri oluşturmak için parçalar oluşturur ve birleştirir.

Örnekler

C #

/// <özet>/// Oluşturucu tarafından oluşturulan bir ürünü temsil eder/// halka açık sınıf Araba{    halka açık dizi Yapmak { almak; Ayarlamak; }    halka açık dizi Modeli { almak; Ayarlamak; }    halka açık int NumDoors { almak; Ayarlamak; }    halka açık dizi Renk { almak; Ayarlamak; }    halka açık Araba(dizi Yapmak, dizi model, dizi renk, int numDoors)    {        Yapmak = Yapmak;        Modeli = model;        Renk = renk;        NumDoors = numDoors;    }}/// <özet>/// Oluşturucu soyutlaması/// halka açık arayüz ICarBuilder{    dizi Renk { almak; Ayarlamak; }    int NumDoors { almak; Ayarlamak; }    Araba GetResult();}/// <özet>/// Beton oluşturucu uygulaması/// halka açık sınıf FerrariBuilder : ICarBuilder{    halka açık dizi Renk { almak; Ayarlamak; }    halka açık int NumDoors { almak; Ayarlamak; }    halka açık Araba GetResult()    {        dönüş NumDoors == 2 ? yeni Araba("Ferrari", "488 Örümcek", Renk, NumDoors) : boş;            }}/// <özet>/// Yönetmen/// halka açık sınıf SportsCarBuildDirector{    özel ICarBuilder _builder;    halka açık SportsCarBuildDirector(ICarBuilder inşaatçı)     {        _builder = inşaatçı;    }    halka açık geçersiz İnşaat()    {        _builder.Renk = "Kırmızı";        _builder.NumDoors = 2;    }}halka açık sınıf Müşteri{    halka açık geçersiz DoSomethingWithCars()    {        var inşaatçı = yeni FerrariBuilder();        var yönetmen = yeni SportsCarBuildDirector(inşaatçı);        yönetmen.İnşaat();        Araba myRaceCar = inşaatçı.GetResult();    }}

Yönetici, yukarıdaki örnekte bir araba örneğini birleştirerek, yapıyı Müşteri tarafından Yönetmene verilen ayrı bir inşaatçı nesnesine devreder.

Ayrıca bakınız

Referanslar

  1. ^ a b Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). Tasarım Desenleri: Yeniden Kullanılabilir Nesne Tabanlı Yazılımın Unsurları. Addison Wesley. pp.97ff. ISBN  0-201-63361-2.CS1 bakım: birden çok isim: yazar listesi (bağlantı)
  2. ^ "Oluşturucu tasarım modeli - Sorun, Çözüm ve Uygulanabilirlik". w3sDesign.com. Alındı 2017-08-13.
  3. ^ a b "Dizin / arşiv / 2010 / kış / 51023-1 / sunumlar" (PDF). www.classes.cs.uchicago.edu. Alındı 2016-03-03.
  4. ^ "İnşaatçı tasarım modeli - Yapı ve İşbirliği". w3sDesign.com. Alındı 2017-08-12.

Dış bağlantılar