建造者设计模式6

一、定义

        将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。产品的组成部分是不变的,但每一部分是可以灵活选择的。

二、建造者需要的几个角色

建造者模式的结构图客厅装修的结构图

 

        1.Product产品类。这个产品类比较复杂,内部有许多其它类的对象的引用,可以视为此产品类的逻辑上必不可少的“组成部分”。当我们要构造出此产品的时候,产品持有的其它引用也必须得到初始化。

        2.Builder建造者。这是一个抽象接口,用于定义生产产品的各个“组成部分”,并提供生成这个产品的方法。

        3.ConcreteBuilder建造者实现类。具体生产出产品对象的各个组成部分。

        4.Director指挥者。调用建造者实现类来生产出产品的各个组成部分,并将其装配到产品类中。

三、建造模式心法

 建造模式与工厂模式比较

        工厂设计模式关心的是创造哪一个产品,会有一个逻辑判断返回哪一个产品给客户端。

        建造者设计模式关心的是如何创建复杂对象。

        使用场景:需要生成的产品对象有复杂的内部结构,通常包含多个成员属性。 

        现在可以解释官方的定义:将一个复杂对象的构建(产品复杂的构造过程)和表示(用户拿到的产品对象的地方,或者说是能够进行调用产品对象的环境)分离,使同样的构建过程(抽象建造者定义的统一接口,Builder类的意思)可以创建不同的表示(不同的具体建造者,产生不同的产品)。简单说:让调用环境与产品复杂的构造逻辑解耦。

        如果是Product product = Director.getProduct(具体建造者类);即使需求变了,只需要修改具体建造者类的代码。因此,在我们的调用环境中,避免了与产品的复杂构造逻辑耦合,是建造者模式的一大好处。

四、例子

        建造者模式,作者:汉森X

        建造者模式(Bulider模式)详解

常见的使用

StringBulider sb = new StringBuilder().append().append().toString();

Header header = new HeaderBuilder()
   .setClientId(SOAHeader.SOAP_CLIENT_ID)
   .setCorrelationId(SOAHeader.SOAP_CORRELATION_ID)
   .buildHeader();

五、优缺点

        优点:

        1.隐藏了产品的构造过程,避免在客户端与产品类复杂的构造逻辑耦合。

        2.具体建造者相互独立,便于为系统增加新的建造者。

        缺点:如果产品众多,则意味着内部的成员种类中多,需要创建多个建造者来满足这样的需求。这样的话,系统可能会很复杂并且庞大,难以维护。

分割线--------------------------------------------------------------------------------------------

下一篇:原型设计模式7

 

刻意练习:

        (1)建造者设计模式是什么?

        (2)考虑使用建造者设计模式的使用场景

        (3)建造者设计模式的优点

        (4)建造者设计模式的缺点

        (5)同样是创建对象,为什么不用工厂设计模式?

          (6)   思考StringBuilder的巧妙之处。字符串由一个一个的字符组成,字符就是内部的对象。

 

 

 

 

posted @ 2022-07-17 12:15  小大宇  阅读(16)  评论(0)    收藏  举报