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

来源:互联网 发布:淘宝拍照模特应聘 编辑:程序博客网 时间:2024/05/20 06:38
    建造者模式能够将复杂的构建与其表示相分离,是的同样的构建过程可以创建出不同的表示。
    建造者模式与抽象工厂的区别是:在建造者模式里,有个指导者,这个指导者来管理建造者,用户与指导者相互联系,指导者联系建造者,最终得到我们需要的产品。即建造者模式可以强制实行一种分步骤进行的建造过程。
    建造者模式是将复杂的的内部创建封装在内部,对于外部调用的人员来说,只要传入指导者和建造者就可以了,具体内部怎样建造成为产品,用户不用知道,不同的产品需要定义不同的建造者。
概念:
    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())调用抽象建造者的实现类的建造步骤,完成对复杂对象的建造功能。客户端一般只需要实例化一个指挥者,然后实例化一个建造者(jeep车的具体建造或者aodi车的具体建造),然后通过指挥者的构造函数或者setter方法传入建造者,在指挥者的指挥类中调用建造过程。
建造模式的优点:
    1.封装性
        使用建造者模式时,可以使客户端不必知道产品的内部组成的细节,如上面的例子,最后都返回car对象,传入不同的建造者,就返回不        同的car对象,客户端不用知道内部的装配步骤
    2.建造者独立,容易扩展
        易扩展体现在不同的建造者的构建,只要建造者的调用的步骤方法一样,就可以通过继承抽象类或者实现接口,来返回不同的建造者,有利于系统的扩展
    3.便于控制细节风险
        因为具体的建造者是独立的,因此可以对建造对象进行定制diy或者细化等等操作,而不用担心会对其他模块产生任何影响
建造者模式的使用场景:
    1.相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式
    2.多个步骤或者零件,都可以装配到一个对象中,但产生的对象内容是不一样的这时候就可以使用此模式
    3.产品类比较复杂,或者调用不同的顺序会产生不同的结构的时候,可以使用建造者模式
    4.在对象的创建过程中会用到系统中的其他对象,这些对象在产品对象的创建工程中是不容易得到的,也可以使用此模式风窗该对象的创建过程。不推荐此种方法,此方法只是一种补偿方法,因为一个对象不容易得到,在设计的时候已经违背了最初的设目标
建造者模式关注的零件类型和装配的顺序,这是他与工厂模式最大不同的地方,虽然同为创建类模式,但是重点确是不同的。


0 0
原创粉丝点击