建造模式可以将一个复杂对象与它的表示分离,使得同样的构造过程可以创建不同的表示。
使用指南:1.当生成的产品有复杂的内部结构2.需要生成的产品的属性相互依赖,这些属性的赋值顺序比较重要
如:生产飞机,需要先生产机身、机翼、发动机等,然户再把它们组装起来,这个过程就是Builder模式,使用该模式时,需要一个Director类,它负责组装部件,同时还需要一个Builder的实现类,它负责生产部件。
interface Builder{ public void buildEngine();//生产发动机部件 public void buildAirframe();//生产机身 //这里返回的是整个产品,但产品的组装不再这里,而再Director里 //这样,实现了过程和部件的解耦 public Plane retrieveResult();}
class Plane{ Engine engine; Airframe airFrame;}
class Engine{}class Airframe{}
class ConcreteBuilder implements Builder{ private Plane plane = new Plane(); //建造发动机 public void buildEngine(){ plane.engine = new Engine(); } //建造机身 public void buildAirframe(){ plane.airFrame = new Airframe(); } public Plane retrieveResult(){ return plane; }}
class Diretor{ private Builder myPlane; //产品的建造方法,负责调用各个部件的建造方法 public void construct() { myPlane = new ConcreteBuilder(); myPlane.buildEngine(); myPlane.buildAirframe(); myPlane.retrieveResult(); }}
其中,Plane为复杂对象,Engine和Airframe为复杂对象的部件,从代码来看,用ConcreteBuilder来生产各个部件, 然后用Director组装成品,最后调用retrieveResult来获得整个产品。