设计模式--建造者模式

建造者模式的英文是:Separate the construction of a complex object from its representation so that the same construction process can create different representations.意思是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式可以分为以下四个角色:

1. builder:给出一个抽象接口,规定产品对象的各个组成成分的建造。

2. ConcreteBuilder:实现Builder中所有的方法。 并返回建造好的实例。

3. Director:负责安排已有的模块顺序,然后通过Builder进行建造。

4. Product:要创建的复杂对象,一个系统中会有多个产品类,这些产品类,不一定有共同的接口,可以是完全不相关的。

建造者模式对应的类图:


各个类对应的代码如下:

导演者director

package com.zz.builder;
/**
 * 导演者,起到组装的作用
 * @author txxs
 *
 */
public class Director {
	private Builder builder = new ConcreteBuilder();
	
	//构造产品,负责调用各个零件的构造方法
	public Product builder(){
		builder.setPart1();
		builder.setPart2();
		builder.setPart3();
		//其他部分部件
		return builder.builderProduct();
	}

}

抽象建造者Builder

package com.zz.builder;
/**
 * 抽象建造者
 * @author txxs
 *
 */
public abstract class Builder {
	//设置产品的不同部分,以获得不同的产品
	public abstract void setPart1();
	public abstract void setPart2();
	public abstract void setPart3();
	
	//……其他部件
	
	//建造产品
	public abstract Product builderProduct();

}

具体建造者ConcreteBuilder:

package com.zz.builder;
/**
 * 具体建造者,实现继承的抽象方法
 * @author txxs
 *
 */
public class ConcreteBuilder extends Builder {
	
	private Product product = new Product();
	//设置产品零件
	@Override
	public void setPart1() {
		//安装第一部分部件
	}
	@Override
	public void setPart2() {
		//安装第二部分部件
	}
	@Override
	public void setPart3() {
		//安装第三部分部件
	}
    //……其他部件
	
	//构建一个产品
	@Override
	public Product builderProduct() {
		return product;
	}
}

产品类Product

package com.zz.builder;
/**
 * 产品类
 * @author txxs
 *
 */
public class Product {
	//产品的业务处理方法
}

下面通过一个实例将建造者模式进行应用,这个例子是通过建造者模式模拟组装大众CC,在组装的过程中大众CC就是产品,暂且认为有经济型和豪华型,经济型和豪华型的发动机型号是不一样的,并且豪华型具有车载电视而经济型并没有。大众CC的建造厂就是Builder,而不同车型的组装车间分别实现Builder就是ConcreteBuilder,最后通过Director进行调度组装。源码下载。运行结果如图:


那么建造者模式在什么场景下使用

1、同样的方法,不同的执行顺序、产生不同的结果时。

2、多个部件或零件,组装到一个对象中去,但结果不同时。

3、产品类很复杂,或产品类中不同的方法调用顺序产生不同的效果时。

创建者模式和同为创建型模式的工厂方法的区别是,创建者模式关注的是零件的类型和装配的工艺。

哈哈,这在学习。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值