java - Builder pattern precision -


i'm working on builder pattern. there 1 thing don't , it's following. let's want create computers, laptop , desktop ones. should create computerbuilder use different process depending on parameter pass it, or should create laptopbuilder and desktopbuilder? i've seen both in code samples online. wikipedia uses second method in pizza example. me looks more factory pattern, use external light on this. thanks!

create abstract builder , extend 2 concrete builder subclasses. abstracts logic out.

here sample code. in code, 3 standard methods defined in abstract class. extending classes can choose of these implement. finally, abstract classes implement abstract method , return computer.

public abstract class builder {      public void dosomethinga() {};     public void dosomethingb() {};     public void dosomethingc() {};     public abstract computer returncomputer(); } 

now, laptopbuilder class extends abstract class , has own versions of 2 of methods:

public class laptopbuilder {      private computer computer;      public laptopbuilder(computer computer) {         this.computer = computer;     }      public void dosomethinga() {         system.out.println("laptop method a");     }      public void dosomethingb() {         system.out.println("laptop method b");     }      public computer returncomputer() {         return computer;     } } 

finally, desktopbuilder class extends abstract class , has own versions of 2 of methods:

public class desktopbuilder {      private computer computer;      public desktopbuilder(computer computer) {         this.computer = computer;     }      public void dosomethingb() {         system.out.println("desktop method b");     }      public void dosomethingc() {         system.out.println("desktop method c");     }      public computer returncomputer() {         return computer;     } } 

now that's needed create director abstract class, along desktop , laptop concrete director:

public abstract class director {     public abstract computer build(builder builder); }  public class laptopdirector extends director {     public computer build(builder builder) {         builder.dosomethinga();         builder.dosomethingb();         return builder.returncomputer();     } }  public class desktopdirector extends director {     public computer build(builder builder) {         builder.dosomethingb();         builder.dosomethingc();         return builder.returncomputer();     } } 

finally, in client, create computer, create relevant builder, create relevant director , call build method.

edit: post may of value: when use builder pattern?


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -