本文共 3073 字,大约阅读时间需要 10 分钟。
我们要建造一个复杂的产品。比如:神州飞船,Iphone。这个复杂的产品的创建非常复杂,有很多步骤需要处理时,可以使用创造模式.
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
–分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。
–由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。飞船/轨道舱/发动机/逃逸仓的实体类,这里为了方便合在了一起
public class AirShip { private OrbitalModule orbitalModule; //轨道舱 private Engine engine; //发动机 private EscapeTower escapeTower; //逃逸塔 public void launch(){ System.out.println("发射!"); } public OrbitalModule getOrbitalModule() { return orbitalModule; } public void setOrbitalModule(OrbitalModule orbitalModule) { this.orbitalModule = orbitalModule; } 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; } }class OrbitalModule{ private String name; public OrbitalModule(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }class Engine { private String name; public Engine(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }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; } }
构建飞船组件的接口:
public interface AirShipBuilder { Engine builderEngine(); OrbitalModule builderOrbitalModule(); EscapeTower builderEscapeTower();}
组装飞船的接口:
public interface AirShipDirector { AirShip directAirShip(); }
构建飞船组件的实现类:
public class AirShipBuilder implements AirShipBuilder { @Override public Engine builderEngine() { System.out.println("构建牌发动机!"); return new Engine("神舟牌发动机!"); } @Override public EscapeTower builderEscapeTower() { System.out.println("构建逃逸塔"); return new EscapeTower("神舟牌逃逸塔"); } @Override public OrbitalModule builderOrbitalModule() { System.out.println("构建轨道舱"); return new OrbitalModule("神舟牌轨道舱"); } }
组件飞船的实现类:
public class AirshipDirector implements AirShipDirector { private AirShipBuilder builder; public AirshipDirector(AirShipBuilder builder) { this.builder = builder; } @Override public AirShip directAirShip() { Engine e = builder.builderEngine(); OrbitalModule o = builder.builderOrbitalModule(); EscapeTower et = builder.builderEscapeTower(); //装配成飞船对象 AirShip ship = new AirShip(); ship.setEngine(e); ship.setEscapeTower(et); ship.setOrbitalModule(o); return ship; }}
测试:
public class Client { public static void main(String[] args) { AirShipDirector director = new AirshipDirector(new AirShipBuilder()); AirShip ship = director.directAirShip(); System.out.println(ship.getEngine().getName()); ship.launch(); }}
–StringBuilder类的append方法
–SQL中的PreparedStatement –JDOM中,DomBuilder、SAXBuilder转载地址:http://pnzfb.baihongyu.com/