java设计模式:Builder模式

Builder模式关键是在建立对象是一步一步处理

java设计模式:Builder模式_第1张图片


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模式只需要一个方法调用就能创建对象


你可能感兴趣的:(java设计模式:Builder模式)