设计模式——建造者模式

当要创建一个复杂的对象,该对象包含几个组件,几个组件又需要分别创建时采用建造者模式(其中组件的创建也可以采用工厂模式创建)
  • 主要角色
    • Product被建造对象
    • Components,Product的组件
    • Director导演类,包含创建被建造对象的方法
    • Builder类,负责创建所需的组件
    • Client,持有具体的Builder,并调用Director创建Product
类图:

图片来自:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/19/2599980.html

Demo
public class MotoBike {
	
	private Engine engine;
	private Light light;
	
	public void run(){
		System.out.println("MotoBike with "+engine+" and "+light+" running");
	}
	
	
	public Engine getEngine() {
		return engine;
	}

	public void setEngine(Engine engine) {
		this.engine = engine;
	}

	public Light getLight() {
		return light;
	}

	public void setLight(Light light) {
		this.light = light;
	}
        //内部组件
	public static class Engine{

		private String brand;

		public Engine(String brand) {
			super();
			this.brand = brand;
			System.out.println("EngineBrand:"+brand);
		}

		@Override
		public String toString() {
			return "Engine [brand=" + brand + "]";
		}
		
	}
	//内部组件
	public static class Light{

		
		private String brand;

		public Light(String brand) {
			super();
			this.brand = brand;
			System.out.println("LightBrand:"+brand);
		}

		@Override
		public String toString() {
			return "Light [brand=" + brand + "]";
		}
	}
}

Builder
public interface IMotoBikeBuilder {
	Engine buildEngine();
	Light buildLight();
}

public class MotoBikeBuilderImpl implements IMotoBikeBuilder{

	@Override
	public Engine buildEngine() {
		// 可以结合工厂模式返回对象
		return new Engine("MyEngine");
	}

	@Override
	public Light buildLight() {
		// 可以结合工厂模式返回对象
		return new Light("MyLight");
	}
}


Director
/**
 * 用于指导拼装builder生产的零件过程,返回最终的复杂产品
 * @author Administrator
 *
 */
public interface Director {
	
	public MotoBike directorMotoBike();
}

public class DirectorImpl implements Director{
	
	private IMotoBikeBuilder motoBikeBuilder;

	/**
	 * 客户根据需求传入具体的建造者,而此方法的方法参数为接口的形式,实现解耦
	 * @param motoBikeBuilder
	 */
	public DirectorImpl(IMotoBikeBuilder motoBikeBuilder) {
		super();
		this.motoBikeBuilder = motoBikeBuilder;
	}

	public MotoBike directorMotoBike(){
		Engine engine = motoBikeBuilder.buildEngine();
		Light light = motoBikeBuilder.buildLight();
		//产品的构建需要Builder生产出来的零件
		MotoBike motoBike = new MotoBike();
		motoBike.setEngine(engine);
		motoBike.setLight(light);
		return motoBike;
	}
}

最后是我们的Client
public class Client {

	public static void main(String[] args) {
		//面向接口
		Director director = new DirectorImpl(new MotoBikeBuilderImpl());
		MotoBike motoBike = director.directorMotoBike();
		motoBike.run();
	}
}

打印结果
EngineBrand:MyEngine
LightBrand:MyLight
MotoBike with Engine [brand=MyEngine] and Light [brand=MyLight] running


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值