Loading

设计模式 之 建造者模式

Waiter并不亲自沏茶泡咖啡,而是在内部使用builder来做。

package com.test.pattern.builder;

//待构建产品
class StarBucks {
    private String size;
    private String drink;
    
    public void setSize(String size) {
        this.size=size;
    }
    
    public void setDrink(String drink) {
        this.drink=drink;
    }
}

//抽象builder
abstract class StarBucksBuilder {
    protected StarBucks starbucks;
    
    public StarBucks getStarBucks() {
        return starbucks;
    }
    
    public void createStarBucks() {
        starbucks = new StarBucks();
        System.out.println("one drink is created");
    }
    
    public abstract void buildSize();
    public abstract void buildDrink();
}

//泡茶builder
class TeaBuilder extends StarBucksBuilder {

    @Override
    public void buildSize() {
        // TODO Auto-generated method stub
        starbucks.setSize("medium");
        System.out.println("build medium size");
    }

    @Override
    public void buildDrink() {
        // TODO Auto-generated method stub
        starbucks.setDrink("tea");
        System.out.println("build tea");
    }
}

//泡咖啡builder
class CoffeeBuilder extends StarBucksBuilder {

    @Override
    public void buildSize() {
        // TODO Auto-generated method stub
        starbucks.setSize("medium");
        System.out.println("medium size");
    }

    @Override
    public void buildDrink() {
        // TODO Auto-generated method stub
        starbucks.setDrink("coffee");
        System.out.println("build coffee");
    }
}

//指导如何封装builder
class Waiter {
    private StarBucksBuilder starBucksBuilder;

    public void setStarBucksBuilder(StarBucksBuilder starBucksBuilder) {
        this.starBucksBuilder = starBucksBuilder;
    }
    
    public StarBucks getStarBucksDrink() {
        return starBucksBuilder.getStarBucks();
    }
    
    public void constructStarBucks() {
        starBucksBuilder.createStarBucks();
        starBucksBuilder.buildDrink();
        starBucksBuilder.buildSize();
    }
}
//客户
public class BuilderTest {
    public static void main(String[] args) {
        Waiter waiter = new Waiter();
        StarBucksBuilder coffeeBuilder = new CoffeeBuilder();
        
        //用builder泡咖啡
        waiter.setStarBucksBuilder(coffeeBuilder);
        waiter.constructStarBucks();
        
        //取到饮料
        StarBucks drink = waiter.getStarBucksDrink();
    }
}

 

posted @ 2016-08-15 15:14  注销111  阅读(180)  评论(0编辑  收藏  举报