`
spartan1
  • 浏览: 365207 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Builder模式

 
阅读更多

学习rabbitmq,在看其java client api文档时,讲到AMQP类的请求、应答描述符都有builder类,符合Builder模式,让创建协议对象更加简单,允许使用不变的状态创建他们。

 

一直没有系统学习设计模式,从网上查了一下Builder模式的讲解,中文资料中讲builder模式的基本是人云亦云,拿着翻译的半通不通的所谓中文标准定义,按照自己的例子理解一番,然后写一个简单的小例子,算是搞定。看到那些为了模式而模式的别扭代码,根本看不出builder模式到底有什么好的。

 

这些例子一般是这样的,定义一个Director类,定义一个Builder接口。其中Builder接口有几个createPart1()、createPart2()这样的方法,最后必定有一个getResult()方法返回一个Product对象。而Director类呢,构造时传进一个Builder接口,然后有一个construct方法,里面依次调用builder接口的那几个create方法完事。

 

builder模式根本就不是为这些创建过程很简单的例子准备的,这些例子代码使用builder模式有点“为赋新词强说愁”的感觉,怎么看怎么别扭。看这些例子的用意,是想把对象的创建过程提取到一个叫做Director的类里,这样做有几个前提,才能保证这种提取有意义:

 

1. 创建过程比较普适,有多种Product的创建过程都是一模一样的。

 

2. 创建过程比较复杂,有特殊的顺序和逻辑要求,或者是有非常复杂的参数列表,否则如果就是一两行简单代码,抽象出来没有意义。

 

这些例子中,基本都不满足这两个前提,比如有个配套餐的例子,说套餐A是xxx,套餐B是yyy,可以建立两个Builder,分别生产套餐需要的各种配菜,另外建一个Director类调用Builder中相应的方法生成套餐。这不是完全多余的吗?Director中的过程根本不能通用,谁规定两个套餐必须使用同样的方式创建的?

 

在AMQP.BasicProperties.Builder.build()方法中,封装了对BasicProperties构造函数的调用。这个调用非常复杂,有14个参数:

 

            public BasicProperties build()
            {
                return new BasicProperties(contentType, contentEncoding, headers, deliveryMode, priority, correlationId, replyTo, expiration, messageId, timestamp, type, userId, appId, clusterId);
            }

 

这个封装是比较有意义的。而是用这种方式的主要原因是,builder的所有其他方法都是给自己设置属性,这样可以在任何时刻调用build把自己的一份拷贝生成为BasicProperties。

分享到:
评论

相关推荐

    (创建型模式)Builder模式

    Builder模式是一种创建型设计模式,它提供了一种方法来分步骤构建复杂的对象,使得构建过程和表示分离。这种模式在程序开发中常用于构造产品对象,尤其是当对象的构造过程较为复杂时,Builder模式能够帮助我们更好地...

    设计模式-Builder模式demo

    Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许子类按照步骤构建复杂的对象。这种模式将对象的创建过程分离出来,使得同样的构造过程可以创建不同的表示,从而实现对象创建过程的解耦。 ...

    设计模式 创建型模式 Builder模式(建造者)

    Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的...

    Builder 模式

    Builder模式是一种设计模式,它属于创建型模式,主要用于构建复杂对象。这种模式允许我们通过分离对象的构造过程和表示来创建对象,使得构造过程可以更加灵活,并且能够避免在构造过程中对对象状态的直接修改。...

    Builder模式在Java中的应用

    在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Builder模式来替代多参数...

    【Java面试题】builder模式

    【Java面试题】builder模式

    BUILDER模式 C++实现

    Builder模式是一种设计模式,它属于创建型模式,主要用于复杂对象的构建。在C++中,Builder模式可以帮助我们分步骤地创建一个复杂的对象,而无需关注这些步骤如何组合在一起。这样可以使得构造过程更加灵活,同时也...

    创建型——Builder模式

    Builder模式是一种创建型设计模式,它提供了一种创建对象的灵活方式,将对象的构建过程与表示分离。这种模式在复杂对象的构造过程中特别有用,因为它允许我们通过不同的步骤来构造对象,而不会让客户端代码受到这些...

    软件体系结构Builder模式浅谈

    Builder模式是一种设计模式,主要目的是将复杂对象的构建与表示分离,使得构建过程可以独立于表示进行。在软件工程中,当需要创建的对象具有多个可变组成部分时,Builder模式能够帮助我们构造这些对象,同时保持构建...

    设计模式之建造者Builder模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种,属于创建型模式。它将复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常用于那些需要大量构造参数的对象,通过...

    builder设计模式源码

    在Java或者其他面向对象编程语言中,Builder模式经常被用来提高代码的可读性和可维护性。 Builder模式的核心包括四个角色:Product(产品类)、ConcreteBuilder(具体建造者)、Builder(抽象建造者)和Director...

    builder模式示例代码

    Builder模式是一种设计模式,主要用来创建复杂对象,它将对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。在Android开发中,Builder模式被广泛应用于创建视图或者复杂的对象配置,例如Intent的构造...

    【Java 设计模式-源码】Builder 模式:在 Java 中清晰构建自定义对象

    在 Java 开发中,Builder 模式是一种强大的创建型模式,它允许我们逐步构建复杂的对象。本文将详细介绍 Builder 模式的意图、解释、编程示例、适用场景以及实际应用。同时,还将提供示例代码的下载链接,方便读者...

    java builder 模式之贷款办理

    Java Builder模式是一种设计模式,它在对象构建过程中提供了一种灵活的方式来组合对象的各个部分,使得代码更加清晰、易于维护。在"Java Builder 模式之贷款办理"这个主题中,我们可以深入理解如何利用Builder模式来...

    FreeBuilder为Java1.6 自动生成 Builder模式

    Builder模式是一种设计模式,主要用来解决复杂对象的构建问题,特别是在对象的构造过程中有大量可选参数时。在Java编程中,FreeBuilder是一个自动化工具,它可以帮助开发者为Java 1.6及更高版本的类自动生成Builder...

    Java设计模式:Builder模式应用案例[整理].pdf

    Builder模式是一种设计模式,主要用来解决复杂对象的构建问题,特别是在对象的构造过程中涉及大量的参数时。在Java编程中,Builder模式提供了一种更加灵活、结构化的创建对象的方式,避免了构造函数的过度膨胀和...

    Android-使用Builder模式设置字体大小颜色位置的属性

    在Android开发中,Builder模式是一种常用的创建型设计模式,它能帮助我们构建复杂对象,同时保持构造过程的清晰和简洁。在本示例中,我们关注的是如何利用Builder模式来设置字体大小、颜色以及位置等属性。这在创建...

Global site tag (gtag.js) - Google Analytics