"围观"设计模式(9)--创建型之创建者模式(Builder Pattern)

生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。----WIKIPEDIA


个人的理解:

建造者模式可以设置不同的属性或者行为,创建出不一样的对象。比如说生产汽车,假如有三个重要的工序,塑形、拼装、上色。那么可以通过创建者模式来设置,这三道工序中不同的车来说,三道工序可能就是不一样的。通过创建者模式来创建出对象的表现形式也自然就不一样。


借助上面这个例子,画出他的一个类图

主要的代码如下所示

public class Car {

	private String shape;
	
	private String assemble;
	
	private String color;}

public abstract class CarBuilder {

	protected Car car = new Car();
	
	public abstract void setShape(String shape);
	
	public abstract void setAssemble(String assemble);
	
	public abstract void setColor(String color);
	
	public Car getCar(){
		return this.car;
	}
}

public class HongQICarBuilder extends CarBuilder{

	@Override
	public void setShape(String shape) {
		this.car.setShape(shape);
	}

	@Override
	public void setAssemble(String assemble) {
		this.car.setAssemble(assemble);
	}

	@Override
	public void setColor(String color) {
		this.car.setColor(color);
	}

}

这个例子是根据定义以及自己对于创建者模式的理解写的,核心的思想是,通过这样的设计利用不同的实现方法来创建不同的对象出来,这个是其本质。


另外参考其他书籍如设计模式之禅中介绍到可以创建出不同的行为。

假设这样的情景,车子从启动、行驶、停止三个环节,然后我想要的是,我指定那几个环节发生动作哪几个环节就要发生动作。这样的话,创建出来的对象的动作或者说行为是不同的。


主要的代码

public abstract class CarBuilder {

	public abstract void setOrder(List<String> orderList);
	public abstract Car getCar();
	
}
public abstract class Car {

	private List<String> exeOrderList = new ArrayList<String>();
	public abstract void startUp();
	public abstract void run();
	public abstract void stop();
	
	public final void templateMethod(){
		for (String exeOrder : exeOrderList) {
			if("startUp".equals(exeOrder)){
				this.startUp();
			}else if("run".equals(exeOrder)){
				this.run();
			}else if("stop".equals(exeOrder)){
				this.stop();
			}
		}
	}
	
	public final void setOrder(List<String> exeOrderList){
		this.exeOrderList = exeOrderList;
	}
	
}

public class HongQiCar extends Car{

	@Override
	public void startUp() {
		System.out.println("红旗车启动");
	}

	@Override
	public void run() {
		System.out.println("红旗车行驶中");
		
	}

	@Override
	public void stop() {
		System.out.println("红旗车停止");
		
	}

}
创建者 实现类
public class HongQiCarBuilder extends CarBuilder{

	private HongQiCar hongQiCar = new HongQiCar();
	
	@Override
	public void setOrder(List<String> orderList) {
		this.hongQiCar.setOrder(orderList);
	}

	@Override
	public Car getCar() {
		
		return this.hongQiCar;
	}

}

其中这个产生对象行为不同,需要借助模板方法模式这个模式会在后面博文中进行讲解。


适用的范围

1. 相同的方法,顺序不同产生的产品不一样。

2. 多个属性,拼装时不同拼装出来的产品也不一样。

3. 产品类复杂,或者产品类中的调用顺序不同产生了不同的效能。


比较

与工厂方法模式比较,创建者关注的是零件的类型和装配的顺序,但是工厂方法关注的是创建一个个的对象,可以是零件,但是它不关注组装顺序。


源码下载地址:下载设计模式源代码



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值