Selasa, 16 April 2013

Builder pattern

,

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.


 
Gambar 2. Class Diagram
Builder
·           interface abstract untuk membuat object (product).
(menetapkan sebuah interface abstract untuk membuat bagian dari sebuah object (product))
ConcreteBuilder
·           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
Director
·         Class Director bertanggung jawab untuk mengatur urutan object kreasi yang benar.
·         Menerima Concrete Builder sebagai  sebuah parameter dan menjalankan operasi yang diperlukan di atasnya.
Product
·           object terakhir yang akan diciptakan oleh Director menggunakan Builder.
·        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

Java
/** "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();
        }
}



0 komentar to “Builder pattern”

Posting Komentar