建造模式(Builder)体现了艺术性的“建造”,并不是像工厂模式一样简单地生产一个产品对象,提供给请求者就满足了。建造模式,在其建造地过程中,能够非常清晰将一个产品的组成部分分离开来,同时又能够在一定的指导下进行合理的组装起来,完成客户端更高要求的请求。
另外,作为产品类,它并非就是一个实实在在实体类,有时候一个产品类可能是一个能够完成相当复杂,或者具有相当关键的操作的具体类,甚至在系统的设计中位于十分核心的位置。如何合理地对这些产品类的对象进行组装的同时,可能依赖它们来完成某些业务过程。
建造模式的一般结构如图所示:
上图清晰地给出了建造模式所对应的角色,这四个角色为:
01.指导者角色
02.抽象建造者角色
03.具体建造者角色
04.具体产品角色
下面详细阐述建造模式中各个角色的具体含义:
01.指导者角色
指导者角色是建造模式中非常关键的一个角色,如果没有它,当客户端请求时,无法对产品进行有序合理地建造。指导者角色关注的是,抽象建造者角色所抽象出来操作步骤,并根据这些步骤给出一个合理的执行顺序来对产品对象进行装配建造。
一个指导者实现类可以指导多个产品对象的建造,亦即,指导者实现类是知道这个产品对象的具体组装顺序的,从而给抽象建造者类以帮助。但是,由于抽象建造者类并没有将具体的建造细节在指导者实现类中表现出来,所以指导者实现类对产品如何组装建造的细节一无所知。
如果必要的的话,指导者实现类在完成产品的组装以后,根据客户端调用所传达的启发式信息,返回建造的结果,以响应客户端的请求。
02.抽象建造者角色
抽象建造者角色是对产品建造过程的抽象,也就是对产品该如何组装建造进行规范化。但是,抽象建造者角色只是给出这些操作步骤的抽象方法,具体地建造实现有具体建造者角色来完成。可见,抽象建造者角色也无从知道产品的具体建造的细节。
在抽象建造者类的抽象设计中,如果不要求返回建造产品的对象,抽象建造者甚至都不知道具体建造的是哪一个产品对象,而只是知道某某对象先这样做,然后这样做,……,最后这样做。
03.具体建造者角色
具体建造这角色是与具体产品角色紧密联系的,而正是抽象建造者角色屏蔽了具体建造者角色所实现的操作的细节,使得指导者角色无法知道具体建造的细节。
具体建造者类非常熟悉产品的具体结构,都由哪些部分组成,调用产品对象的哪些方法能完成什么功能,等等。同时,具体建造者类继承(或实现)了抽象建造者规范定义的建造步骤(可能对哪一步在先,哪一步在后并不能确定),最终完成了产品的组装建造。
04.具体产品角色
具体产品角色,很显然代表了一个具体的产品对象,是具体建造者角色的直接数据来源。
具体产品实现类一般具有比较复杂的组成结构,如包含其他复杂的类属性,而这些类的对象的构造可能也相对复杂一些,这样才能发挥出具体建造者实现类的建造能力——将一个具有如此复杂组成的产品对象,根据抽象建造者类的指示,一个步骤一个步骤地完成某个小部件的构造,剩下的工作就是在指导者实现类的指导下进行组装了。
基于上面对建造模式的四个角色的理解的基础上,下面基于建造模式,通过实例进行分析设计。
第一种:
为了更加直观、形象,上图对组成具体产品的部件也进行了简单的设计,Part是构成具体产品的部件的统一接口,当然也可以是多个不同接口实现的部件构成的产品对象。该图比较清晰地表现出了建造模式中各个角色所对应的类,容易理解。
上面图中,需要说明的是,客户端调用指导者对象的时候,直接将构造产品对象的部件全部作为指导方法directBuild的参数值(引用)传递过来,所以要求抽象建造者只是以这些部件作为每个建造的方法(一个小步骤)的参数,以为具体建造者提供规范。
在实际系统设计中,构成产品对象的全部小部件所需要的基本类型数据完全被发送到指导者对象那里,然后指导者委托抽象建造者根据这些基本类型数据进行规划设计,抽象出建造方法,等待具体建造者来具体实现。此时,具体建造者需要对某个或者某些部件进行加工构造。
第二种:
上面这个图,体现了基于建造模式的设计的扩展,它要求对抽象建造者类的设计具有更好的通用性,能够适应由于具体产品对象的组成变化,而能够通过扩展抽象建造者类,在具体建造者类中来实现具体产品对象的建造。
其中,ConcreteProduct与OtherConcreteProduct产品类对象分别都是由SequencePart与DirectionPart的具体部件所组成,并分别通过ConcreteBuilder与OtherConcreteBuilder具体建造者类对象来实现产品的组装建造。
当然,如果客户端请求者要求返回实际对应的产品对象的话,使用建造模式就可能不能够很好地进行扩展了,因为多个客户端可能要求建造的产品对象,必须通过抽象建造者类来返回,所以,除非将全部可能的返回类型都包括——自然而然想到,返回类型是Object即可,然后客户端会根据自己的实际需要进行类型强制转换获得,满足自身请求的需要。
分享到:
相关推荐
**建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...
Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的...
在深入探讨C#设计模式中的建造者(Builder)模式之前,我们先来理解一下什么是设计模式。设计模式是在软件工程中解决常见问题的一种通用可重用解决方案,它们提供了一种标准化的方法来解决软件开发中遇到的挑战。...
建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。这种模式的核心思想在于将对象的构建与表示分离,使得构建过程和不同表示可以独立变化,提高...
建造者模式(Builder)是设计模式中的一种结构型模式,它允许我们分步骤构建复杂的对象,而无需暴露构造过程。这种模式将构造过程与对象的表示分离,使得同样的构造过程可以创建不同的表示。在C++中,建造者模式通常...
Builder模式是一种设计模式,它属于创建型模式,主要用于构建复杂对象。这种模式提供了一种方法来分离开对象的构造过程和表示方式,使得构造过程可以按照步骤进行,并且允许用户只指定他们关心的部分,而忽略其他不...
建造者模式(Builder Pattern)是一种创建型设计模式,允许使用多个简单的对象一步一步构建一个复杂的对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式的组成 产品...
建造者模式【Builder Pattern】是一种设计模式,它在软件工程中用于将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式在处理复杂对象的构造时特别有用,因为它允许我们通过分离构造...
建造者模式(Builder)是Java设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。在Android开发中,这种模式尤其有用,因为Android组件如Activity、Fragment等的初始化过程通常...
在Java或其他面向对象语言中,生成器模式通常包括四个主要角色:产品(Product)、建造者(Builder)、具体建造者(Concrete Builder)和导演(Director)。产品是最终要构建的对象,建造者定义了产品的部分或全部...
建造者模式(Builder Pattern)是Java设计模式中的一种,它属于创建型模式,主要用于构建复杂的对象。这种模式将对象的创建过程与表示分离,使得同样的创建过程可以创建不同的表示。在实际开发中,当我们需要创建的...
建造者模式(Builder Pattern)是一种创建型设计模式,它允许我们分步骤构建复杂对象,而无需暴露构造过程的细节。这种模式将一个复杂的构建过程分解为一系列简单的步骤,使得构造过程可以有不同的解释,从而实现...
建造者模式(Builder Pattern)是软件工程中一种用于创建对象的抽象工厂方法,它将复杂的构建过程分解为一系列步骤,使得构建过程可以独立于其表示进行。这种模式允许客户端使用相同的构建过程创建不同表现形式的...
在Java中,Builder模式通常包含四个主要角色:Product(产品),Builder(建造者),ConcreteBuilder(具体建造者)和Director(导演)。Product是被构建的对象,Builder定义了产品的构造接口,ConcreteBuilder实现...
建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...
Builder模式通常包含四个主要角色:Product(产品),Builder(建造者),ConcreteBuilder(具体建造者)和Director(导演)。Product是被构建的对象,具有多种组成部件;Builder定义了构建产品的接口,而不涉及具体...
### Builder模式:构建复杂对象的艺术 #### 概述 Builder模式是一种软件工程设计模式,它将复杂对象的构建过程与其表示分离,使同一构建过程能够创建出不同的表示。这一模式通常用于创建复合对象,通过子类继承和...
【创建型模式】设计模式之建造者模式(Builder Pattern) 建造者模式(Builder Pattern)是设计模式中的一个创建型模式,它提供了一种方法来分步骤构造复杂的对象,使得构造过程和表示分离,使得同样的构建过程可以...
建造模式是一种设计模式,它将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在软件工程中,这种模式常用于当一个类的实例化过程过于复杂,或者需要通过不同的步骤来构建时。建造模式允许...
建造者模式是一种设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在C++中实现建造者模式,我们可以遵循以下步骤: 首先,我们需要定义一个抽象建造者(Builder)类,它声明了一...