Builder Pattern adalah sebuah software design pattern. Tujuannya
adalah sebagai langkah-langkah abstract kerangka (kontruksi) object,
jika suatu implementasi menggunakan langkah-langkah
yang berbeda, maka akan membuat representasi object yang berbeda juga.
Builder Pattern sering digunakan untuk membangun produk sesuai dengan
sebuah pola struktur Composite Pattern, dengan cara memisahkan
pembangunan kompleks object dari representation, sehingga proses
konstruksi yang sama dapat membuat representation yang berbeda.
![](http://upload.wikimedia.org/wikipedia/en/6/6e/Builder2.png)
Gambar 2. Class Diagram
·
interface abstract untuk membuat object (product).
(menetapkan
sebuah interface abstract untuk membuat bagian
dari sebuah object (product))
·
menyediakan
implementasi untuk Builder.
·
membangun dan merakit
bagian-bagian dari produk dengan menerapkan interface Builder untuk membangun banyak object
·
mendefinisikan dan melacak yang
mewakili ciptaanya (kreasinya)
·
menyediakan interface untuk
mengambil product
· Class
Director bertanggung jawab untuk mengatur urutan object kreasi yang benar.
· Menerima Concrete Builder sebagai sebuah parameter dan menjalankan operasi yang
diperlukan di atasnya.
· mewakili kompleks object dalam proses pembangunan.
ConcreteBuilder membangun representasi product internal dan mendefinisikan
proses yang menyebabkannya terkumpul
· termasuk kelas yang menentukan
bagian-bagian penyusunnya, juga interface untuk merakit bagian-bagian ke dalam
hasil akhir.
Tips
- Builder
fokus pada membangun sebuah kompleks object
setahap demi setahap. Abstract Factory menekankan suatu
produk keluarga object (baik sederhana
atau kompleks). Builder akan mengembalikan produk sebagai langkah terakhir,
tetapi sejauh menyangkut Abstract Factory, produk akan
kembali segera.
- Builder
sering membangun sebuah Composite.
- Sering kali, desain
awal dengan menggunakan Factory Method (sedikit rumit,
lebih mudah disesuaikan, subclass
berkembang banyak) dan berkembang ke arah Abstract Factory, Prototype, atau Builder (lebih fleksibel, lebih kompleks) sebagai perancang
menemukan di mana fleksibilitas lebih dibutuhkan.
- Kadang-kadang saling melengkapi pola
penciptaan: Builder dapat menggunakan salah satu pola-pola (patterns) lain untuk menerapkan komponen yang dibangun. Abstract Factory, Builder, dan Prototype dapat menggunakan Singleton dalam implementasinya.
Contoh
/** "Product" */
class Pizza {
private
String dough = "";
private
String sauce = "";
private
String topping = "";
public void setDough(String dough) {
this.dough
= dough;
}
public void setSauce(String sauce) {
this.sauce
= sauce;
}
public void setTopping(String topping) {
this.topping
= topping;
}
}
/** "Abstract Builder" */
abstract class PizzaBuilder {
protected
Pizza pizza;
public Pizza getPizza() {
return
pizza;
}
public void createNewPizzaProduct() {
pizza
= new Pizza();
}
public abstract void buildDough();
public abstract void buildSauce();
public abstract void buildTopping();
}
/** "ConcreteBuilder" */
class HawaiianPizzaBuilder extends PizzaBuilder {
public
void buildDough() {
pizza.setDough("cross");
}
public void buildSauce() {
pizza.setSauce("mild");
}
public void buildTopping() {
pizza.setTopping("ham+pineapple");
}
}
/** "ConcreteBuilder" */
class SpicyPizzaBuilder extends PizzaBuilder {
public
void buildDough() {
pizza.setDough("pan
baked");
}
public void buildSauce() {
pizza.setSauce("hot");
}
public void buildTopping() {
pizza.setTopping("pepperoni+salami");
}
}
/** "Director" */
class Cook {
private
PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder
pb) {
pizzaBuilder
= pb;
}
public Pizza getPizza() {
return
pizzaBuilder.getPizza();
}
public void constructPizza() {
pizzaBuilder.createNewPizzaProduct();
pizzaBuilder.buildDough();
pizzaBuilder.buildSauce();
pizzaBuilder.buildTopping();
}
}
/** A given type of pizza being constructed. */
public class BuilderExample {
public
static void main(String[] args) {
Cook
cook = new Cook();
PizzaBuilder
hawaiianPizzaBuilder = new HawaiianPizzaBuilder();
PizzaBuilder
spicyPizzaBuilder = new SpicyPizzaBuilder();
cook.setPizzaBuilder(hawaiianPizzaBuilder);
cook.constructPizza();
Pizza pizza = cook.getPizza();
}
}