Minggu, 27 November 2016

Revisi Builder Design pattern - Implementation [Animal Toy]

Builder Design pattern - Implementation [Animal Toy] 

Design Pattern merupakan sebuah istilah di dalam rekayasa perangkat lunak yang mengacu pada solusi umum yang bisa dipergunakan kembali atau berulang-ulang untuk menyelesaikan masalah-masalah yang umum terjadi dalam konteks tertentu atau khusus yang ditemui pada desain perangkat lunak. Sebuah pola desain yang sudah terbentuk bukan berarti desain tersebut dapat langsung digunakan untuk menulis program.

Builder Pattern adalah sebuah software design pattern.
Tujuannya adalah sebagai 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. 

Class Diagram :
 

 Design Pattern Diagram :

AnimalToy.java 
 
 public class AnimalToy  
 {  
  private String animalToyName;  
  private String animalToyHead;  
  private String animalToyBody;  
  private String animalToyArms;  
  private String animalToyLegs;  
  private String animalToyTail;  
  public String getAnimalToyName()  
  {  
   return animalToyName;  
  }  
  public void setAnimalToyName( String animalToyName )  
  {  
   this.animalToyName = animalToyName;  
  }  
  public String getAnimalToyHead()  
  {  
   return animalToyHead;  
  }  
  public void setAnimalToyHead( String animalToyHead )  
  {  
   this.animalToyHead = animalToyHead;  
  }  
  public String getAnimalToyBody()  
  {  
   return animalToyBody;  
  }  
  public void setAnimalToyBody( String animalToyBody )  
  {  
   this.animalToyBody = animalToyBody;  
  }  
  public String getAnimalToyArms()  
  {  
   return animalToyArms;  
  }  
  public void setAnimalToyArms( String animalToyArms )  
  {  
   this.animalToyArms = animalToyArms;  
  }  
  public String getAnimalToyLegs()  
  {  
   return animalToyLegs;  
  }  
  public void setAnimalToyLegs( String animalToyLegs )  
  {  
   this.animalToyLegs = animalToyLegs;  
  }  
  public String getAnimalToyTail()  
  {  
   return animalToyTail;  
  }  
  public void setAnimalToyTail( String animalToyTail )  
  {  
   this.animalToyTail = animalToyTail;  
  }  
  @Override  
  public String toString()  
  {  
   return "AnimalToy [animalToyName=" + animalToyName + ", animalToyHead=" + animalToyHead  
           + ", animalToyBody=" + animalToyBody + ", animalToyArms=" + animalToyArms  
           + ", animalToyLegs=" + animalToyLegs + ", animalToyTail=" + animalToyTail + "]\n";  
  }  
 } 
 


AnimalToyBuilder.java

public abstract class AnimalToyBuilder  
 {  
  private AnimalToy animalToy;  
  public AnimalToy getAnimalToy()  
  {  
   return animalToy;  
  }  
  public void setAnimalToy( AnimalToy animalToy )  
  {  
   this.animalToy = animalToy;  
  }  
  public final AnimalToy buildAnimalToy()  
  {  
   AnimalToy animalToy = createAnimalToy();  
   setAnimalToy(animalToy);  
   buildAnimalHead();  
   buildAnimalBody();  
   buildAnimalLegs();  
   buildAnimalArms();  
   buildAnimalTail();  
   setAnimalToyName();  
   return animalToy;  
  }  
  public abstract void buildAnimalHead();  
  public abstract void buildAnimalBody();  
  public abstract void buildAnimalLegs();  
  public abstract void buildAnimalArms();  
  public abstract void buildAnimalTail();  
  public abstract void setAnimalToyName();  
  public abstract AnimalToy createAnimalToy();  
 }  

DogToyBuilder.java
 public class DogToyBuilder extends AnimalToyBuilder  
 {  
  public AnimalToy createAnimalToy()  
  {  
   return new AnimalToy();  
  }  
  public void buildAnimalHead()  
  {  
   getAnimalToy().setAnimalToyHead("Dog head");  
   System.out.println("Step 1 : Dog Head has been built");  
  }  
  public void buildAnimalBody()  
  {  
   getAnimalToy().setAnimalToyBody("Dog Body");  
   System.out.println("Step 2 : Dog Body has been built");  
  }  
  public void buildAnimalLegs()  
  {  
   getAnimalToy().setAnimalToyLegs("Dog 4 legs");  
   System.out.println("Step 3 : Dog Legs has been built");  
  }  
  public void buildAnimalArms()  
  {  
   // No implementation because dog doesn't have Arms  
   getAnimalToy().setAnimalToyLegs("No arms");  
   System.out.println("Step 4 : is skiped because dog doesn't have Arms");  
  }  
  public void setAnimalToyName()  
  {  
   getAnimalToy().setAnimalToyName("Dog");  
  }  
  public void buildAnimalTail()  
  {  
   getAnimalToy().setAnimalToyTail("Dog Tail");  
   System.out.println("Step 5 : Dog Tail has been built");  
  }  
 } 
 
 
 LionToyBuilder.java  
 public class LionToyBuilder extends AnimalToyBuilder  
 {  
  public AnimalToy createAnimalToy()  
  {  
   return new AnimalToy();  
  }  
  public void buildAnimalHead()  
  {  
   getAnimalToy().setAnimalToyHead("Lion head");  
   System.out.println("Step 1 : Lion Head has been built");  
  }  
  public void buildAnimalBody()  
  {  
   getAnimalToy().setAnimalToyBody("Lion Body");  
   System.out.println("Step 2 : Lion Body has been built");  
  }  
  public void buildAnimalLegs()  
  {  
   getAnimalToy().setAnimalToyLegs("Lion 4 legs");  
   System.out.println("Step 3 : Lion Legs has been built");  
  }  
  public void buildAnimalArms()  
  {  
   // No implementation because Lion doesn't have Arms  
   getAnimalToy().setAnimalToyLegs("No arms");  
   System.out.println("Step 4 : is skiped because Lion doesn't have Arms");  
  }  
  public void setAnimalToyName()  
  {  
   getAnimalToy().setAnimalToyName("Lion");  
  }  
  public void buildAnimalTail()  
  {  
   getAnimalToy().setAnimalToyTail("Lion Tail");  
   System.out.println("Step 5 : Lion Tail has been built");  
  }  
 }


MonkeyToyBuilder.java 
public class MonkeyToyBuilder extends AnimalToyBuilder  
 {  
  public AnimalToy createAnimalToy()  
  {  
   return new AnimalToy();  
  }  
  public void buildAnimalHead()  
  {  
   getAnimalToy().setAnimalToyHead("Monkey head");  
   System.out.println("Step 1 : Monkey Head has been built");  
  }  
  public void buildAnimalBody()  
  {  
   getAnimalToy().setAnimalToyBody("Monkey Body");  
   System.out.println("Step 2 : Monkey Body has been built");  
  }  
  public void buildAnimalLegs()  
  {  
   getAnimalToy().setAnimalToyLegs("Monkey 2 legs");  
   System.out.println("Step 3 : Monkey Legs has been built");  
  }  
  public void buildAnimalArms()  
  {  
   getAnimalToy().setAnimalToyArms("Monkey 2 Arms");  
   System.out.println("Step 4 : Monkey Arms has been built");  
  }  
  public void setAnimalToyName()  
  {  
   getAnimalToy().setAnimalToyName("Monkey");  
  }  
  public void buildAnimalTail()  
  {  
   getAnimalToy().setAnimalToyTail("Monkey Tail");  
   System.out.println("Step 5 : Monkey Tail has been built");  
  }  
 } 


ToyMaker.java 
 public class ToyMaker  
 {  
  public final static String LION_TOY  = "Lion";  
  public final static String DOG_TOY  = "Dog";  
  public final static String MONKEY_TOY = "Monkey";  
  public static AnimalToy makeToy( String toyType ) throws Exception  
  {  
   AnimalToyBuilder animalToyBuilder = null;  
   if( toyType.equalsIgnoreCase(LION_TOY) )  
   {  
    animalToyBuilder = new LionToyBuilder();  
   }  
   else if( toyType.equalsIgnoreCase(DOG_TOY) )  
   {  
    animalToyBuilder = new DogToyBuilder();  
   }  
   else if( toyType.equalsIgnoreCase(MONKEY_TOY) )  
   {  
    animalToyBuilder = new MonkeyToyBuilder();  
   }  
   else  
   {  
    System.out.println("Sorry we cann't make : " + toyType);  
    throw new Exception("Sorry we cann't make : " + toyType);  
   }  
   return animalToyBuilder.buildAnimalToy();  
  }  
 }  


BuilderClient.java

public class BuilderClient  
 {  
  public static void main( String[] args ) throws Exception  
  {  
   AnimalToy lionToy = ToyMaker.makeToy(ToyMaker.LION_TOY);  
   System.out.println(lionToy);  
   AnimalToy dogToy = ToyMaker.makeToy(ToyMaker.DOG_TOY);  
   System.out.println(dogToy);  
   AnimalToy monkeyToy = ToyMaker.makeToy(ToyMaker.MONKEY_TOY);  
   System.out.println(monkeyToy);  
  }  
 }  
  

Tidak ada komentar:

Posting Komentar