设计模式-builder(构造器模式)

设计模式-builder(构造器模式)

Bilder模式定义:

        将一个复杂对象的构建和表示分离,是同样的创建构建过程可以创造不同的表示。
 
     Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用用不知道内部的具体构建细节。Builder模式是非常类似抽象工厂模式,细微的区别大概只是在反复使用中才能体会到。

为何使用建造者模式

      是为了将复杂对象的构建过程与它的部件分离。注意: 是解耦过程和部件。


    因为一个复杂的对象,不但有很多大量组成部分。例如汽车,有很多部件:车轮、方向盘、发动机,还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开。

建造者模式典型结构图





如何使用建造者模式

      首先假设一个复杂对象是由多个部件组成的,Builder模式是吧复杂对象的创建和部件的创建分开来,分别用Director和Builder类来表示。


如果需要一个接口来创建部件:

package com.designpatten.builder;


public interface Builder {
	void buildCarWheel() ;
	void buildSteeringWheel() ;
	void buildEngine() ;
	void buildCarFrame() ;
	Car getCar() ;
}

在Director中构建复杂对象,将Builder中定义的一个一个部件组装起来。

package com.designpatten.builder;

public class Director {

	private Builder builder ;
	
	public Director(Builder builder){
		this.builder = builder ;
	}
	
	public void getCarTogether(){
		builder.buildCarFrame() ;
		builder.buildEngine();
		builder.buildCarWheel() ;
		builder.buildSteeringWheel() ;
	}
	
}
实现具体的Builder:

  • 通过实现接口,来完成部件的构建过程
  • 重新获得目标对象接口
package com.designpatten.builder;

public class BenzBuilder implements Builder {

	private Benz benz ;
	
	public BenzBuilder(){
		benz = new Benz() ;
	}
	
	@Override
	public void buildCarWheel() {
		System.out.println("Benz add Wheel");
	}

	@Override
	public void buildSteeringWheel() {
		System.out.println("Benz add SteeringWheel");
	}

	@Override
	public void buildEngine() {
		System.out.println("Benz add engine");
	}

	@Override
	public void buildCarFrame() {
		System.out.println("Benz add frame");
	}

	@Override
	public Car getCar() {
		return benz;
	}

}
package com.designpatten.builder;


public class BMWBuilder implements Builder {


	private BMW bmw ; 
	
	public BMWBuilder(){
		bmw = new BMW() ;
	}
	
	@Override
	public void buildCarWheel() {
		System.out.println("BMW add CarWheel");
	}


	@Override
	public void buildSteeringWheel() {
		System.out.println("BMW add SteeringWheel");
	}


	@Override
	public void buildEngine() {
		System.out.println("BMW add Engine");
	}


	@Override
	public void buildCarFrame() {
		System.out.println("BMW add Frame");
	}


	@Override
	public Car getCar() {
		return bmw;
	}


}
具体的产品信息

package com.designpatten.builder;

public interface Car {
	
	void run() ;
	
}

package com.designpatten.builder;

public class BMW implements Car {

	@Override
	public void run() {
		System.out.println("BMW ---> run()");
	}

}
package com.designpatten.builder;

public class Benz implements Car {

	@Override
	public void run() {
		System.out.println("Benz -------> run()");
	}

}
生产Car

package com.designpatten.builder;

public class Client {
	public static void main(String[] args) {
		BenzBuilder benzBuilder = new BenzBuilder() ;
		BMWBuilder bmwBuilder = new BMWBuilder() ;
		
		Director benzDirector = new Director(benzBuilder) ;
		benzDirector.getCarTogether() ;
		Car benz = benzBuilder.getCar() ;
		benz.run() ;
		System.out.println("----------------------------");
		Director bmwDirector = new Director(bmwBuilder) ;
		bmwDirector.getCarTogether() ;
		Car bmw = bmwBuilder.getCar() ;
		bmw.run() ;
	}
}

输出结构

Benz add frame
Benz add engine
Benz add Wheel
Benz add SteeringWheel
Benz -------> run()
----------------------------
BMW add Frame
BMW add Engine
BMW add CarWheel
BMW add SteeringWheel
BMW ---> run()


参考:http://www.weixueyuan.net/view/6110.html

       C++设计模式

       http://www.iteye.com/topic/71175

          http://www.cnblogs.com/moonz-wu/archive/2011/01/11/1932473.html   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值