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
Post a Comment