Builder

GOF Intent:
Separate the construction of a complex object from its representation so that the same construction process can create different representations.

Builder کلاسي است که کارش ساختن يک Product پيچيده است و مراحل ساخت آن Product را در خود نگه مي دارد.

معمولا وقتي از Builder استفاده مي کنيم که ساخت Product از مراحل مختلفي تشکيل شده است.

هر Product داراي Builder مخصوص به خود است.

چه وقت مي توانيم از Builder Pattern استفاده کنيم؟

  1. وقتي که Object هايي داشته باشيم با اجزاي يکسان، اما با نحوه ساخته شدن هاي متفاوت.
  2. وقتي که الگوريتم ساخت يک Complex Object از اجزاي تشکيل دهنده آن مستقل باشد.

تفاوت Builder و Factory:
Factory کلاسي است که مجموعه کلاس هاي مختلف از يک خانواده را ايجاد مي کند.
Builder کلاسي است که مراحل ساخت يک Complex Product را مشخص مي کند.

دياگرام Builder Design Pattern چنين است:

Builder Design Pattern

مثال:
حيوانات داراي سر و دم و بدن و غيره هستند. اما فرم و ترکيب (نحوه ساخت) اين اجزا از حيواني به حيوان ديگر تفاوت مي کند. اگر بخواهيم همين مثال را با Builder Pattern پياده سازي کنيم چنين کدي خواهيم داشت:

public abstract class Animal {
   private String head;
   private String body;
   private String tail;

   // Setter & Getter Methods

   public abstract void eat();

   public void showMe(){
      System.out.println(head);
      System.out.println(body);
      System.out.println(tail);
      eat();
   }
}


public class Monkey extends Animal{
   public void eat(){
      System.out.println(“I eat banana!”);
   }
}


public class Cat extends Animal{
   public void eat(){
      System.out.println(“I eat cat food!”);
   }
}


// AnimalBuilder is the Parent of Concrete Builders
public abstract class AnimalBuilder {
   public Animal aAnimal;

   public abstract void buildAnimalHead();
   public abstract void buildAnimalBody();
   public abstract void buildAnimalTail();
}


public class MonkeyBuilder extends AnimalBuilder{

   public void MonkeyBuilder(){
      aAnimal = new Monkey();
   }

   public void buildAnimalHead(){
      System.out.println(“This is Monkey head”);
   }

   public void buildAnimalBody(){
      System.out.println(“This is Monkey body”);
   }

   public void buildAnimalTail(){
      System.out.println(“This is Monkey tail”);
   }
}


public class CatBuilder extends AnimalBuilder{
… // Same as MonkeyBuilder
}


public class Kid{
   public void makeAnimal(AnimalBuilder aAnimalBuilder){
      aAnimalBuilder.buildAnimalHead();
      aAnimalBuilder.buildAnimalBody();
      aAnimalBuilder.buildAnimalTail();
   }
}


public static void main(String[] args){
   Kid aKid = new Kid();
   AnimalBuilder buider1 = new MonkeyBuilder();
   aKid.makeAnimal(buider1);
   builder1.aAnimal.showMe();
}

فايده هاي Builder:

  • باعث مي شود جزئيات ساخت هر Product از ديد کلاس Director (مانندKid در مثال فوق) پنهان گردد.
  • نحوه ساخت يک Product را از خود آنProduct جدا مي کند.
  • فرايند ساخت يک کلاس پيچيده متمرکز مي شود و بدين ترتيب کنترل آن ساده تر مي‌گردد.


منبع ها:

  1. Design Patterns – Elements of Reusable Object Oriented Software (GOF) By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  2. Builder in codeproject

با برچسب: ,
پست شده در Design Pattern

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*


+ شش = 7

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

تماس با من: admin@paspars.com