2011-03-08 20 views
13

Tasarım Desenleri'ndeki yeniliklerden dolayı Oluşturucu Kalıbı ile ilgili bir sorum var. Bugün, Builder Pattern'in Java, C# sınıfında StringBuilder sınıfından farklı olduğunu duydum. Ben bu onunla StringBuilder yöntem Append var yapmakta olduğunu düşünüyorum ... Oluşturucu Kalıbı ana hedefi birkaç adımda karmaşık nesneleri oluşturmak için olduğunu biliyoruz ... Bu yüzden ... beni fark bulmak için pek bulunuyorStringBuilder and Builder Pattern

Bana gerçekten bir farkın olduğunu söyleyebilir misin, eğer öyleyse ... bu nedir?

cevap

13

Sınıf StringBuilder ve Builder Tasarım Kalıbı karıştırıyor gibi geliyor. Aslında iki farklı fikir. (MSDN)

dize nesne değişmez:

StringBuilder daha fazla ölçülebilir dize işlemlerini sağlayan bir Java sınıf ve .NET olduğunu. Her her zaman System.String sınıfındaki yöntemlerden birini kullandığınızda, yeni bir dize nesnesi, yeni bir nesne için için yeni bir alan ayırma alanı gerektirir. 'un bir dizgede tekrarlanan değişikliklerini gerçekleştirmeniz gerektiği durumlarda, yeni bir String nesnesi oluşturmakla ilişkili ek yükü maliyetli olabilir. System.Text.StringBuilder sınıfı, dizgisini yeni bir nesne oluşturmadan değiştirmek istediğinizde kullanılabilir. örneği için, StringBuilder sınıfının kullanılması, , birçok dizeyi döngüsünde birleştirerek performansı artırabilir.

oluşturucu model bir yazılım tasarım modelidir:

diğer yandan Builder Pattern

karmaşık kod düzenlemeye anlamına sınıfları ve/ya da ara bir dizi olan bir tasarım modelidir. Amaç, nesnesinin nesnesinin soyut adımlarıdır, böylece bu adımların farklı uygulamaları nesnelerinin nesnelerinin farklı temsillerini oluşturabilir. Çoğunlukla, builder modeli ürününe uygun modeline uygun bir modeli olan kompozit modele uygun ürünler üretmek için kullanılır.

StringBuilder ait Append yöntem basitçe mevcut dize daha fazla karakter ekler. Yeni nesneler oluşturulmamıştır (oluşturucu deseninin modelinin temel işlevi) ve hiçbir desen kalıbı yoktur. Tek bir nesne örneğine tek bir yöntem çağrısı.

+2

Çok hoş geldiniz. Ve SO'ya hoş geldiniz! –

+0

+1 güzel yorum. – Nilesh

+0

Oluşturucu desenini kullandığımızda, ortada yeni nesnelerin oluşturulduğunu belirten herhangi bir başvuru yapabilir misiniz? Ya da belki ifadeni yanlış anladım. Lütfen açıklığa kavuşturun. –

5
  1. Farklı amaç. String Builder, String Construction ile yardımcı olur, Builder modeli, bir nesnenin yapısını temsilinden ayırır.
  2. Farklı yapı. String Builder'ın iki ortak çalışanı vardır. Builder modelinde dört ortak çalışan vardır.

ad 1) Dize oluştururken soyutlama yoktur. Örneğin, Ağaç yapısı nesneler veya XML dosyası (uygulama) tarafından temsil edilebilen soyutlamadır.

2 adet) StringBuilder nesne kullanırken vardır iki ortak:

    :

    1. Client
    2. StringBuilder

    Builder Pattern kullanılarak dört ortak çalışan vardır soyutlama Director tarafından kullanılır: - (çocuk ekleyin kökü oluşturmak, ..., adımlardır ağaç yapısında olması durumunda)

  1. Abstract Builder-0
  2. Director inşaat adımların ne Abstract Builder söylüyor.
  3. Concrete Builder - inşaat başlatmak için Director diyor - Abstract Builder somut uygulama (XMLBuilder, ObjectBuilder, olabilir ...)
  4. Client olduğunu.
+0

+1 Nesneleri ve etkileşimlerini bu şekilde tartışırken ortak çalışanlar fikrini beğeniyorum. Müşteri kodu, istemci/sunucu ilişkileri hakkında her zaman duyuyorsunuz ama işbirlikçiler, bu benim için yeni. Fikir üzerinde genişleyecek bir makaleye kullanışlı bir bağlantıya sahip olmak ister misiniz? Teşekkürler! –

0

Belgelerin incelenmesi, StringBuilder öğesinin karşılık gelen modeli kullanmadığını söyleyebilirim. Composite pattern kullanın. Oluşturucu modeli, nesneyi "el ile adım adım el ile" veya döngü içinde toplamaz. Hazır çözümler var.

+0

"Kompozit Desen" in açıklamasına, modele uydukça çok benzemiyorum - adı bilmiyorum - bir çift değişmez ve değişebilir sınıfın olması, böylece değişmez bir nesnenin Durum değişebilir bir nesneye kopyalanabilir ve değiştirilebilir bir nesnenin durumu yeni bir değişmez nesneye kopyalanabilir. Kod daha sonra istenen olmayan bir verimi elde etmek için birleştirilmemiş bir değiştirilebilen nesneyi etkili bir şekilde manipüle edebilir ve daha sonra, aynı durumu kapsülleyen bir paylaşılabilir değişmez nesne üretmesini isteyebilir. – supercat