A StringBuilder
, Oluşturucu Desenine benzer, ancak bu tasarım deseninin GoF açıklamasıyla fazla bir şey paylaşmaz. Tasarım modelinin orijinal noktası
Karmaşık bir nesnenin yapısını temsilinden ayırın, böylece aynı yapım süreci farklı temsiller oluşturabilir.
- Tasarım Desenlerinden Gamma, Helm, Johnson, Vlissides.
(not: “karmaşık”, öncelikle “karmaşık” veya “zor” değil, “çoklu parçalardan oluşur” anlamına gelir)
“Farklı temsiller” burada anahtardır. Örneğin, bu inşaat sürecini varsayarak:
interface ArticleBuilder {
void addTitle(String title);
void addParagraph(String paragraph);
}
void createArticle(ArticeBuilder articleBuilder) {
articleBuilder.addTitle("Is String Builder an application of ...");
articleBuilder.addParagraph("Is the Builder Pattern restricted...");
articleBuilder.addParagraph("The StringBuilder class ...");
}
hangi somut uygulamanın sağlandığına bağlı olarak bir HtmlDocument
veya bir TexDocument
veya daha MarkdownDocument
fazlasıyla sonuçlanabiliriz :
class HtmlDocumentBuilder implements ArticleBuilder {
...
HtmlDocument getResult();
}
HtmlDocumentBuilder b = new HtmlDocumentBuilder();
createArticle(b);
HtmlDocument dom = b.getResult();
Bu nedenle, Oluşturucu modelinin merkezi bir noktası polimorfizmdir . Tasarım Desenleri kitabı bu kalıbı Soyut Fabrikayla karşılaştırır:
Soyut Fabrika, Oluşturucu'ya benzer, çünkü karmaşık nesneler de oluşturabilir. Birincil fark, Oluşturucu deseninin adım adım karmaşık bir nesne oluşturmaya odaklanmasıdır. […] Oluşturucu ürünü son adım olarak verir, ancak Soyut Fabrika söz konusu olduğunda, ürün derhal iade edilir.
- Tasarım Desenlerinden Gamma, Helm, Johnson, Vlissides.
Bu adım adım görünüş, Oluşturucu modelinin daha popüler bir özelliği haline gelmiştir, böylece ortak bakış açısında, Oluşturucu modeli şu şekilde anlaşılır:
Bir nesnenin yapısını çoklu adımlara ayırın. Bu, bu özellikleri desteklemeyen dillerde bile adlandırılmış değişkenleri veya isteğe bağlı parametreleri kullanmamızı sağlar.
Wikipedia bu şekli şöyle tanımlar:
Oluşturucu deseni, bir nesne oluşturma yazılımı tasarım desenidir. Soyut fabrika modelinin ve niyeti polimorfizmi sağlamak olan fabrika yöntemi modelinin aksine, üretici modelinin amacı teleskop yapıcı anti-paternine [ihtiyaç duyulan] bir çözüm bulmaktır . [...]
Oluşturucu paterninin başka bir faydası var. Düz veri içeren nesneler (html kodu, SQL sorgusu, X.509 sertifikası ...), yani kolayca düzenlenemeyen veriler için kullanılabilir. Bu tür veriler adım adım düzenlenemez ve bir kerede düzenlenmelidir. Böyle bir nesneyi inşa etmenin en iyi yolu bir oluşturucu sınıfı kullanmaktır. [kaynak belirtilmeli]
- Wikipedia'daki Builder Pattern'ten , çeşitli katılımcılar tarafından.
Gördüğümüz gibi, bu ismin hangi örgüye atıfta bulunduğunu gerçekten ortak bir anlayış yoktur ve bazı noktalarda farklı tanımlar birbirleriyle çelişir (örneğin, Yapımcılar için polimorfizmin önemi ile ilgili).
Desenin StringBuilder
çeşitli yorumlarının tek ortak özelliği , ürünün tek seferde değil, adım adım oluşturulmasıdır. Tasarım modelinin GoF tanımının kesin bir okumasını karşılamıyor, ancak tasarım modellerinin iletişimi kolaylaştırmak için dövülebilir kavramlar olduğunu lütfen unutmayın. StringBuilder
Atipik olsa da Oluşturucu Örüntüsünün bir örneğini aramaya devam edecektim - Java'daki bu yapının temel nedeni değişmez dizgelerin varlığında performansın bir araya gelmesidir, fakat bazı ilginç nesne yönelimli tasarımlar değil.