zoukankan      html  css  js  c++  java
  • 建造者模式(Builder)

    建造者模式(Builder)将复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

    建造者模式通常包括下面几个角色:

    1. 生成器builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。

                             为创建一个Product对象的各个部件指定抽象接口;

    2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。

                                定义并明确它所创建的表示;

                                提供一个检索Product的接口;

    3. 导向器Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

                                构造一个使用Builder接口的对象;

    4. Product:表示要创建的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程;

                      包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

    在建造者模式中,Director规定了创建一个对象所需要的步骤和次序,Builder则提供了一些列完成这些步骤的方法,ConcreteBuilder给出了这些方法的具体实现,是对象的直接创建者。

                                                                         建造者模式的结构图

                      

    协作
    • 客户创建Director对象,并用它所想要的Builder对象进行配置。
    • 一旦产品部件被生成,导向器就会通知生成器。
    • 生成器处理导向器的请求,并将部件添加到该产品中。
    • 客户从生成器中检索产品。

    使用建造者模式的好处:

    1.使用建造者模式可以使客户端不必知道产品内部组成的细节。它使你可以改变一个产品的内部表示;
    Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何装配的。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义一个新的生成器。

    2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。它将构造代码和表示代码分开;

    Builder模式通过封装一个复杂对象的创建和表示方式提高了对象的模块性。客户不需要知道定义产品内部结构的类的所有信息;这些类是不出现在Builder接口中的。每个ConcreteBuilder包含了创建和装配一个特定产品的所有代码。这些代码只需要写一次;然后不同的Director可以复用它以在相同部件集合的基础上构作不同的Product。

    3.由于具体的建造者是独立的,因此可以对建造过程进行更精细的控制,而不对其他的模块产生任何影响。

    Builder模式与一下子就生成产品的创建型模式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器中取回它。因此Builder接口相比其他创建型模式能更好的反映产品的构造过程。这使你可以更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。

    使用建造模式的场合:

    1.创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。

    2.要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。
    3. 当构造过程必须允许被构造的对象有不同的表示时。

    相关模式
    Abstract Factory(3 . 1)与Builder相似,因为它也可以创建复杂对象。主要的区别是Builder模式着重于一步步构造一个复杂对象。而 Abstract Factory着重于多个系列的产品对象(简单的或是复杂的) 。Builder在最后的一步返回产品,而对于 Abstract Factory来说,产品是立即返回的。
    Composite(4.3)通常是用Builder生成的。

  • 相关阅读:
    AtCoder Regular Contest 093
    AtCoder Regular Contest 094
    G. Gangsters in Central City
    HGOI 20190711 题解
    HGOI20190710 题解
    HGOI 20190709 题解
    HGOI 20190708 题解
    HGOI20190707 题解
    HGOI20190706 题解
    HGOI 20190705 题解
  • 原文地址:https://www.cnblogs.com/ctddjyds/p/5889801.html
Copyright © 2011-2022 走看看