建造者设计模式

package Builder_Pattern;

import java.util.ArrayList;
/**
 * 建造者设计模式:将一个复杂对象的构建于它的表示分离,使得同样的构建过程可以创建不同的表示。
 * 在建造者设计模式中,有如下的3个角色:
 * 1.Product产品类
 *   通常是实现了模板方法模式
 * 2.Builder抽象建造者
 *   规范产品的组建,一般是由子类来实现
 * 3.ConcreteBuilder具体建造者
 *   实现抽象建造者定义的所有方法,并返回一个组建好的对象
 * @author dd
 *
 */
public class demo1 {
    public static void main(String[] args) {
        ArrayList<String> sequence = new ArrayList<String>();
        sequence.add("engineBoom");
        sequence.add("Start");
        sequence.add("stop");
        BMWBuilder bmwBuilder = new BMWBuilder();
        bmwBuilder.setSequence(sequence);

        BMWModel bmw = (BMWModel) bmwBuilder.getCarModel();

        bmw.run();
    }
}

abstract class CarModel{
    private ArrayList<String> sequence = new ArrayList<String>();
    protected abstract void start();

    protected abstract void stop();

    protected abstract void alarm();

    protected abstract void engineBoom();

    final public void run(){
        for(int i=0;i<sequence.size();i++){
            String actionName = sequence.get(i);
            if(actionName.equalsIgnoreCase("start")){
                this.start();
            }else if(actionName.equalsIgnoreCase("stop")){
                this.stop();
            }else if(actionName.equalsIgnoreCase("alarm")){
                this.alarm();
            }else if(actionName.equalsIgnoreCase("engineBoom")){
                this.engineBoom();
            }
        }
    }

    final public void setSequence(ArrayList<String> seq){
        this.sequence = seq;
    }
}

class BMWModel extends CarModel{

    @Override
    protected void start() {
        // TODO Auto-generated method stub
        System.out.println("宝马启动");
    }

    @Override
    protected void stop() {
        // TODO Auto-generated method stub
        System.out.println("宝马停下");
    }

    @Override
    protected void alarm() {
        // TODO Auto-generated method stub
        System.out.println("宝马鸣笛");
    }

    @Override
    protected void engineBoom() {
        // TODO Auto-generated method stub
        System.out.println("宝马引擎响");
    }

}

abstract class CarBuilder{
    public abstract void setSequence(ArrayList<String> sequence);

    public abstract CarModel getCarModel();
}

class BMWBuilder extends CarBuilder{
    private BMWModel bmw = new BMWModel();
    @Override
    public void setSequence(ArrayList<String> sequence) {
        // TODO Auto-generated method stub
        this.bmw.setSequence(sequence);
    }

    @Override
    public CarModel getCarModel() {
        // TODO Auto-generated method stub
        return this.bmw;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值