GOF23 设计模式 之建造模式

使用场景:某个对象构建过程复杂的情况,需要按照步骤去处理;

建造者模式的本质:分离了对象子组件的单独构造(builder)和装配(director),可以根据不同的装配者生产不同的产品;实现了组件间解耦,从而实现了复用;

代码实现

1, 基本组件

// 主组件
package builder;

public class AirShip {
	private OrbitalMoudle orbitalMoudle; // 轨道舱
	private Engine engine; // 发动机
	private EscapeTower escapeTower; // 逃逸塔
	public OrbitalMoudle getOrbitalMoudle() {
		return orbitalMoudle;
	}
	public void setOrbitalMoudle(OrbitalMoudle orbitalMoudle) {
		this.orbitalMoudle = orbitalMoudle;
	}
	public Engine getEngine() {
		return engine;
	}
	public void setEngine(Engine engine) {
		this.engine = engine;
	}
	public EscapeTower getEscapeTower() {
		return escapeTower;
	}
	public void setEscapeTower(EscapeTower escapeTower) {
		this.escapeTower = escapeTower;
	}
	
	
}



// 零件三个
// 1
package builder;

public class EscapeTower {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public EscapeTower(String name) {
		super();
		this.name = name;
	}

}

// 2
package builder;

public class Engine {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Engine(String name) {
		super();
		this.name = name;
	}
	
}



// 3
package builder;

public class OrbitalMoudle {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public OrbitalMoudle(String name) {
		super();
		this.name = name;
	}
}

2,抽象接口

package builder;

public interface AirShipBuilder {
	OrbitalMoudle buildOrbitalMoudle();
	Engine buildEngine();
	EscapeTower buildEscapeTower();

}
package builder;

public interface AirShipDiretor {
	AirShip createAirShip();
}

3,实现接口类 (根据不同的类生产不同的产品)

package builder;

public class LeonAirShipBuilder implements AirShipBuilder { // 类似的stringbuidler; xml解析中的Dombuilder,saxbuilder;

	
	@Override
	public OrbitalMoudle buildOrbitalMoudle() {
		System.out.println("构建LEON的轨道舱");
		return new OrbitalMoudle("LEON的轨道舱");
	}

	@Override
	public Engine buildEngine() {
		// TODO Auto-generated method stub
		System.out.println("构建LEON的引擎");
		return new Engine("LEON的引擎");
	}

	@Override
	public EscapeTower buildEscapeTower() {
		// TODO Auto-generated method stub
		System.out.println("构建LEON的逃逸舱");
		return new EscapeTower("LEON的逃逸舱");
	}

}

package builder;

public class LeonAirShipDiretor implements AirShipDiretor {

	@Override
	public AirShip createAirShip() {
		// TODO Auto-generated method stub
		// 完成构建
		AirShipBuilder builder = new LeonAirShipBuilder();
		OrbitalMoudle orbitalMoudle = builder.buildOrbitalMoudle();
		Engine engine = builder.buildEngine();
		EscapeTower escapeTower = builder.buildEscapeTower();
		// 完成组装
		AirShip airShip= new AirShip();
		airShip.setOrbitalMoudle(orbitalMoudle);
		airShip.setEscapeTower(escapeTower);
		airShip.setEngine(engine);

		return airShip;
	}

}

4,调用

package builder;

public class Client {

	public static void main(String[] args) {
		AirShip airShip = new LeonAirShipDiretor().createAirShip();
		System.out.println(airShip.getEngine().getName());
	}

}
发布了189 篇原创文章 · 获赞 10 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/wangrong111222/article/details/104102526
今日推荐