موارد استفاده:
- وقتی میخواهید روند ساخت (Construction) و نمایش (Representation) را مجزا و ایزوله کنید.
- در صورتی که در روند ساخت یک شیء، بازنماییهای متفاوتی نیاز باشد.
- وقتی نیاز به کنترل بیشتری برای روند ساخت اشیاء دارید.
- یک واسط مجرد برای ساخت اجزاء مختلف شیء تعریف میکند.
- با پیادهسازی واسط Builder اجزاء مختلف محصول را ایجاد و سرهم میکند.
- همچنین پیادهسازی و بازنمایی شیء را در بر دارد.
- رابطی برای بازگرداندن محصول آماده شده فراهم میکند.
- با استفاده از واسط Builder شیء را میسازد.
- نمایندهٔ شیء پیچیدهایست که توسط ConcreteBuilder ایجاد میشود. میتوان قسمت Product را هم به دو قسمت تبدیل کرد.
- ProductInterface
- ConcreteProduct
- ASCII Converter
- TeX Converter
- PDF Converter
مثال: فرض کنید بخواهیم انواع و اقسام خانهها را طراح کنیم. روند طراحی در تمامی خانهها یکسان است. که به کلاسهای زیر تقسیم میشود:
##Builder
- زیربنای آن را ایجاد میکنیم.
- ساختار و اسکلت آن را ایجاد میکنیم.
- سقف آن را میسازیم.
- فضای داخل خانه را طراحی میکنیم.
بنابراین برای طراحی همهٔ ساختمانها یک رویهٔ یکسان داریم. بنابراین یک کلاس اینترفیس برای تمامی ساختمانها با ۴ رویهٔ مذکور ایجاد میکنیم. که به آن Builder میگوییم.
در این مثال: HouseBuilder
حال به تعداد انواع خانهها، اینترفیس Builder را پیادهسازی میکنم، در این مثال میتوانیم خانهٔ خشتی، خانهٔ گلی، خانهٔ برفی، خانهٔ فلزی، خانهٔ فلزی، خانهٔ چوبی، خانهٔ سیمانی را بسازیم. به هر یک از این کلاسها ConcreteBuilder میگوییم:
- KheshtiBuilder
- GeliBuilder
- BarfiBuilder
- FeleziBuiler
پیمانکار ساختمان، ساختمانها را از طریق اینترفیس House ایجاد میکند. (ورودی: یک نوع خانه از نوع HouseBuilder)
- ساخت زیربنا
- ساخت اسکلت و ساختار ساختمان
- ساخت سقف
- طراحی درون ساختمان
محصول نهایی، حاصل ترکیب تمامی مراحل ساخت یک خانه است.
- خانهٔ گلی
- خانهٔ خشتی
- خانهٔ سیمانی و ...
HouseBuilder builder = new KheshtiBuilder(); Director director = new Director(builder); director.construct();
- java.lang.StringBuilder#append() (unsynchronized)
- java.lang.StringBuffer#append() (synchronized)
- java.nio.ByteBuffer#put() (also on CharBuffer, ShortBuffer, IntBuffer, LongBuffer, FloatBuffer and DoubleBuffer)
- javax.swing.GroupLayout.Group#addComponent()
- All implementations of java.lang.Appendable