设计模式(JAVA)-------建造者模式

场景:设计一个汽车简易制造工艺流程

该模块中主要包括两个部分:

1.汽车制造模型

2.汽车组装过程


建造者模式:

定义:将一个复杂对象的构建与它的标示分离,使得同样的构建过程可以创建不同的目标

在建造者模式中,有如下4个角色:

Produce产品类:

通常是实现了模版模式(Template);

Builder抽象建造者:

规范产品的组件,一般由子类实现;

ConcreteBuilder具体建造者:

实现抽象类定义的所有方法,并且返回一个组建好的对象;

Director导演类:

负载安排已有模块的顺序,然后告诉Builder开始建造。


场景问题解决类图:


主要涉及如下几个角色:

1.车辆模型的抽象类

2.奔驰模型

3.宝马模型

4.抽象汽车建造者

5.宝马建造者

6.奔驰建造者

7.导演类

8.场景类


代码实现:

CarModel:

public abstract class CarModel {
	
	private ArrayList<String> squence = new ArrayList<String>();
	protected abstract void start();
	protected abstract void stop();
	protected abstract void alarm();
	protected abstract void engieBoom();
	
	final public void run() {
		for (int i = 0; i < squence.size(); i++) {
			String actionName = this.squence.get(i);
			if (actionName.trim().equalsIgnoreCase("start")) {
				this.start();
			}else if (actionName.trim().equalsIgnoreCase("stop")) {
				this.stop();
			}else if (actionName.trim().equalsIgnoreCase("alarm")) {
				this.alarm();
			}else if (actionName.trim().equalsIgnoreCase("engine alarm")) {
				this.engieBoom();
			}
		}
	}
	
	final public void setSequence(ArrayList<String> sequence) {
		this.squence = sequence;
	}

}


BenzModel:

public class BenzModel extends CarModel {

	@Override
	protected void start() {
		// TODO Auto-generated method stub
		
	}

	@Override
	protected void stop() {
		// TODO Auto-generated method stub
		
	}

	@Override
	protected void alarm() {
		// TODO Auto-generated method stub
		
	}

	@Override
	protected void engieBoom() {
		// TODO Auto-generated method stub
		
	}
	

}


BWMModle:

public class BWMModel extends CarModel {

	@Override
	protected void start() {
		// TODO Auto-generated method stub
		
	}

	@Override
	protected void stop() {
		// TODO Auto-generated method stub
		
	}

	@Override
	protected void alarm() {
		// TODO Auto-generated method stub
		
	}

	@Override
	protected void engieBoom() {
		// TODO Auto-generated method stub
		
	}

}


CarBuilder:

public abstract class CarBuild {
	
	public abstract void setSequence(ArrayList<String> sequence);
	
	public abstract CarModel getCarModel();

}


BenzBuilder:

public class BenzBuild extends CarBuild {
	
	private BenzModel benzModel = new BenzModel();

	@Override
	public void setSequence(ArrayList<String> sequence) {
		this.benzModel.setSequence(sequence);
	}

	@Override
	public CarModel getCarModel() {
		return this.benzModel;
	}

}


BWMBuilder:

public class BWMBuild extends CarBuild {
	
	private BWMModel bwmModel = new BWMModel();

	@Override
	public void setSequence(ArrayList<String> sequence) {
		this.bwmModel.setSequence(sequence);
	}

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

}


Director:

public class Director {
	
	private ArrayList<String> sequence = new ArrayList<String>();
	private BenzBuild benzBuild = new BenzBuild();
	private BWMBuild bwmBuild = new BWMBuild();
	
	public BenzModel getABenzModel() {
		this.sequence.clear();
		this.sequence.add("start");
		this.sequence.add("stop");
		this.benzBuild.setSequence(sequence);
		return (BenzModel)this.benzBuild.getCarModel();
	}
	
	public BenzModel getBBenzModel() {
		this.sequence.clear();
		this.sequence.add("engine boom");
		this.sequence.add("start");
		this.sequence.add("stop");
		this.benzBuild.setSequence(sequence);
		return (BenzModel) this.benzBuild.getCarModel();
	}
	
	public BWMModel getBwmModel() {
		this.sequence.clear();
		this.sequence.add("start");
		this.sequence.add("stop");
		this.bwmBuild.setSequence(sequence);
		return (BWMModel) bwmBuild.getCarModel();
	}

}


Client:

public class Client {
	
	public static void main(String[] agrs) throws Exception {
		Director director = new Director();
		director.getABenzModel().run();
		
		director.getBBenzModel().run();
		
		director.getBwmModel().run();
	}
}

建造者的优点:

1.使用建造者模式可以使得客户端不必知道产品内部组成的细节;

2.建造者独立,容易扩展;

3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。


建造者模式的使用场景

1.相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用;

2.多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用;

3.产品类非常复杂,或者产品类中调用顺序不同产生了不同的效果;

4.在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,也可以采用。





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值