JAVA之 建造者模式

场景
  • 需要建造一个复杂的产品,有许多子组件,装配步骤。
建造者模式本质:
  • 分离了对象子组件的单独构造(builder负责)和装配(Director负责),从而构造出复杂的对象,模式适用于,某个对象构建过程复杂。
  • 由于实现了构建和装配的解耦,不同的构建器,相同的装配,也可以做出不同的对象,相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法,装配算法的解耦,实现更好的复用。
假设现在构建一个飞船对象,对象属性有引擎对象(engine),逃离塔对象(escapeTower),轨道舱对象(orbitaModule)
飞船类
	public class Airship{
		pricate  OrbitaModule  orbitaModule;
		pricate   Engine   engine;
		pricate  EscapeTower  escapeTower;
		getter,setter...省略
	}
轨道舱对象
	public  class  OrbitaModule  {
		private string name;
	}
引擎对象
	public  class  Engine   {
		private string name;
	}
逃离塔对象
	public  class  EscapeTower  {
		private string name;
	}
  • AirshipBuilder接口
public interface AirshipBuilder{
	Engine  builderEngine();
	OrbitaModule  builderOrbitaModule();
	EscapeTower  builderEscapeTower();
}
  • AirshipDirector接口
pubilc  interface  AirshipDirector{
/**组装飞船对象
*/
	Airship  directorAirShip();
}
  • SxtAirshipBuilder 实现了AirshipBuilder
public  class  SxtAirshipBuilder  implements AirshipBuilder {
	public	Engine  builderEngine(){
		return new Engine();
		//此处经常使用工厂模式  来获取组件对象
	}
	OrbitaModule  builderOrbitaModule(){
		return new OrbitaModule();
	}
	EscapeTower  builderEscapeTower(){
		return newEscapeTower();
	}
}

一般设计模式都是搭配起来用,构建者模式实现里面 获取组件的时候,经常使用工厂模式来获取组件,就如上面获取public Engine builderEngine()里面,经常使用工厂获取组件对象。

  • SxtAirshipDirector 实现了AirshipDirctor
public  class  SxtAirshipDirector  implements   AirshipDirctor{
	private   AirshipBuilder   airshipBuilder;
	//构造器传入AirshipBuilder
	public SxtAirshipDirector(AirshipBuilder  airshipBuilder){
	this.airshipBuilder=airshipBuilder
	}
	@Override
	public  Airship  directAirShip(){
	//获取组件
			Engine engine  = airshipBuilder.builderEngine();
			OrbitalModule  module = airshipBuilder.builderOrbitalModule();
			EscapeTower  tower=airshipBuilder.builderEscapeTower();
			
	//装配对象		
			Airship airship = new Airship();
			airship.setEngine(engine);
			airship.setOrbitalModule(module);
			airship.setEscapeTower(tower);
			return airship;
	}	
}

在这里插入图片描述
Client不必知道灰色部分的复杂构建过程。

开发中应用场景
  • StringBuilder类的append()方法
  • SQL中的PreparedStatement
  • JDOM中,DomBuilder,SAXBuilder

在框架中有一些构建者模式,是企业级应用中,一般没有这么复杂的对象需要建造者模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值