Builder模式关键是在建立对象是一步一步处理
package customer;
class Starbucks
{
private String size;
private String drink;
public void setSize(String size)
{
this.size = size;
}
public void setDrink(String drink)
{
this.drink = drink;
}
}
abstract class StarbucksBuilder
{
protected Starbucks starbucks;
public Starbucks getStarbucks()
{
return starbucks;
}
public void createStarbucks()
{
starbucks = new Starbucks();
System.out.println("a drink is created");
}
public abstract void buildSize();
public abstract void buildDrink();
}
class TeaBuilder extends StarbucksBuilder
{
public void buildSize()
{
starbucks.setSize("large");
System.out.println("build large size");
}
public void buildDrink()
{
starbucks.setDrink("tea");
System.out.println("build tea");
}
}
class CoffeeBuilder extends StarbucksBuilder
{
public void buildSize()
{
starbucks.setSize("medium");
System.out.println("build medium size");
}
public void buildDrink()
{
starbucks.setDrink("coffee");
System.out.println("build coffee");
}
}
class Waiter
{
private StarbucksBuilder starbucksBuilder;
public void setStarbucksBuilder(StarbucksBuilder builder)
{
starbucksBuilder = builder;
}
public Starbucks getstarbucksDrink()
{
return starbucksBuilder.getStarbucks();
}
public void constructStarbucks()
{
starbucksBuilder.createStarbucks();
starbucksBuilder.buildDrink();
starbucksBuilder.buildSize();
}
}
public class Customer {
public static void main(String[] args) {
Waiter waiter = new Waiter();
StarbucksBuilder coffeeBuilder = new CoffeeBuilder();
waiter.setStarbucksBuilder(coffeeBuilder);
waiter.constructStarbucks();
Starbucks drink = waiter.getstarbucksDrink();
}
}
Builder与Factory模式的区别:
Builder模式要很多步来创建对象,而Factory模式只需要一个方法调用就能创建对象