java设计模式之-建造者模式

    建造者模式可以将复杂的构建与其表示相分离,是的相同的构建过程可以创建出不同的表示。

    建造者模式与抽象工厂的差别是:在建造者模式里,有个指导者,这个指导者来管理建造者。用户与指导者相互联系,指导者联系建造者,终于得到我们须要的产品。即建造者模式能够强制实行一种分步骤进行的建造过程。

    建造者模式是将复杂的的内部创建封装在内部。对于外部调用的人员来说,仅仅要传入指导者和建造者就能够了,详细内部如何建造成为产品,用户不用知道,不同的产品须要定义不同的建造者。
概念:
    1.抽象建造者(builder):此类一般为抽象类或者是接口。它负责描写叙述产品的建造过程(一步或者若干部)。同一时候提供返回终于产品的方法,比如这个类叫CarBuilder(void makeHead(建造车头的接口),void makeBody(建造车身的接口),void makeFoot(建造车尾的接口), Car getCar(返回一辆车)),当中三个void方法。是这辆车的组装顺序,getCar是返回终于的产品。
    2.详细建造者(ImplBuilder or extendsBuilder):此类为实现或者继承了第一步所写的接口或者抽象类,能够存在有多个,比方JeepBuilder(吉普车的建造),AodiBuilder(奥迪车的建造),实现getCar()的时候。返回产品的实例一样,实例属性不同
    3.产品实例(Car):指被构建的对象。对象内有多个属性,或者多条构建步骤
    4.指挥者(Director):指挥者又称为导演者,他负责安排对复杂对象的建造过程,指挥者与抽象建造者之间存在关联关系,指挥者中的方法(createCar())调用抽象建造者的实现类的建造步骤,完毕对复杂对象的建造功能。client一般仅仅须要实例化一个指挥者,然后实例化一个建造者(jeep车的详细建造或者aodi车的详细建造),然后通过指挥者的构造函数或者setter方法传入建造者。在指挥者的指挥类中调用建造过程。
建造模式的长处:
    1.封装性
        使用建造者模式时,能够使client不必知道产品的内部组成的细节,如上面的样例,最后都返回car对象,传入不同的建造者,就返回不        同的car对象,client不用知道内部的装配步骤
    2.建造者独立。easy扩展
        易扩展体如今不同的建造者的构建,仅仅要建造者的调用的步骤方法一样。就能够通过继承抽象类或者实现接口。来返回不同的建造者,有利于系统的扩展
    3.便于控制细节风险
        由于详细的建造者是独立的,因此能够对建造对象进行定制diy或者细化等等操作。而不用操心会对其它模块产生不论什么影响
建造者模式的使用场景:
    1.同样的方法,不同的运行顺序。产生不同的事件结果时,能够採用建造者模式
    2.多个步骤或者零件。都能够装配到一个对象中。但产生的对象内容是不一样的这时候就能够使用此模式
    3.产品类比較复杂,或者调用不同的顺序会产生不同的结构的时候。能够使用建造者模式
    4.在对象的创建过程中会用到系统中的其它对象,这些对象在产品对象的创建project中是不easy得到的,也能够使用此模式风窗该对象的创建过程。不推荐此种方法,此方法仅仅是一种补偿方法,由于一个对象不easy得到,在设计的时候已经违背了最初的设目标
建造者模式关注的零件类型和装配的顺序。这是他与工厂模式最大不同的地方。尽管同为创建类模式,可是重点确是不同的。



原文地址:https://www.cnblogs.com/cxchanpin/p/7227133.html