Builder模式是设计模式中比较少争议的一个,其实也是比较有内容的一种。
我们先来看Builder模式的结构,它由四个部分组成:Director , Builder , Builder实现类,Product类。Part作为Product内部的概念被隐藏了。它的设计初衷是将复杂对象的构成(也就是部件)和构建逻辑(也就是算法或者说处理顺序)分离开来。换成现实中最简单的例子,一堆积木玩具,按照图纸,可以堆砌不同的的建筑。其中积木就相当于Part,图纸相当于Director,而建筑就是Product了。当然,这样的例子还是会让人有些糊涂,比如说什么是Builder的实现呢?实际上在这个例子中,积木已经是形成的单元了,它就是Builder的产物而已。
面对这样一个看似简单的模式,初学者又会有这样的疑问,我们使用Builder的目的究竟是想返回不同的实例(都是Product的一种实现)还是根据返回另外的某种实例(只是某些Part没有builder)呢?让我们看看《设计模式:可复用面向对象软件的基础》一书中举的例子,书中Builder的三个实现类ASCIIConvertor , TexConverter 和TextWidgetConverter有各自的getResult的方法(getASCIIText, getTexText, getTextWidget),并且返回不同的类型。那么说明Builder返回的是后者,也就是另外的实例。
这时,我们又来对比一下Jdon网站板桥关于builder的举例,也就是关于汽车和汽车部件的例子(http://www.jdon.com/designpatterns/builder.htm),或者联想一下,在现实生活中,经常有这样的情况。比如说:一种汽车,有豪华版,舒适版,经济版等,都是一种产品,但是内部的部件搭配不同。那么他们是否又能使用Builder模式呢? 或者说,板桥所举的例子不是标准的Builder模式?
似乎不敢确定答案,好,我们再回头看看GOF关于builder模式的适用范围:
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构造过程必须允许被构造的对象有不同的表示时。
其实这两种范围也就是描述了Builder模式的两种应用场景。第一种也就是板桥所举的关于汽车的例子,同样一种builder实例,可以根据Director来获得同一产品不同的实现,它关注的是分离对象的构造算法和组成部分。而第二种也就是原书中的例子,不同的builder获得不同的产品,它关注的是被构造对象的不同。
这样一看,大家是否比较豁然开朗,对不同的Builder和Director关注度,会给我们带来不同的应用。而在绝大多数文章中,是没有提到这点的,或者说并没有清晰的谈到这点。
正因为有两种不同侧重点的应用,所以当对问题分析不够透彻时,或者对模式侧重点不明晰时,我们往往会使用了不太合适的实现。这样,也就会让人感到一些奇怪和误解,同时也限制了调用者的可扩展性。(我们往往重视模式结构单元的可扩展性,确又忽略了调用者的扩展性。)
- 大小: 15.6 KB
- 大小: 16.1 KB
分享到:
相关推荐
然而,为了充分利用框架的优势,你需要对PowerBuilder有深入的理解,并熟悉框架的架构和设计模式。如果框架提供详细的文档和示例代码,那么学习和掌握起来会更加容易。 总的来说,"原创PowerBuilder编程框架"是一个...
总的来说,PowerBuilder 9.0框架的搭建涉及到了GUI设计、数据库交互、业务逻辑实现等多个方面,理解并掌握这个框架对于提升PB开发技能至关重要。虽然现在有更新的版本,但是PB9的基本原理和技巧仍然适用于现代的软件...
这些标签提示我们,此框架可能包含了PowerBuilder的代码规范、设计模式和可复用的代码片段。 在“纠正后框架”这个压缩包文件中,我们推测可能包含了框架的源代码、示例项目、文档说明等内容。源代码部分可能包括了...
Java设计模式和架构图是软件开发中的重要概念,它们对于构建高效、可维护的系统至关重要。设计模式是解决常见编程问题的经验总结,而架构图则是系统结构的可视化表示,帮助我们理解和规划系统的整体布局。 首先,...
《JAVA软件架构设计模式》是深入探讨Java编程领域中软件架构设计的重要参考资料,它涵盖了设计模式这一核心主题,旨在帮助开发者提升代码质量和可维护性。设计模式是软件工程中的最佳实践,代表了在特定情境下解决...
设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这两 种情况分开进行。 设计模式之 Prototype(原型) 用原型实例指定创建对象的...
2. **基础性**:有些J2EE设计模式实际上是建立在某些软件开发设计模式之上的。 3. **影响性**:软件开发设计模式为J2EE设计模式提供了坚实的基础,其应用将直接影响整个结构的稳定性和可扩展性。 #### 五、设计模式...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决问题的可重用解决方案。深入浅出设计模式附书源码Java版源代码,是面向Java开发者的宝贵资源,旨在帮助他们理解和实践各种设计模式。这本书籍的源代码...
- **标准化**:遵循统一的设计模式,有助于提高代码质量和可维护性。 - **快速开发**:开发者可以快速实现基础功能,将更多精力集中在业务逻辑和定制化需求上。 - **易扩展**:框架通常设计为模块化,方便添加新...
除了MVC和工厂模式,《设计模式》一书还探讨了其他重要模式,如单例模式(Singleton)、建造者模式(Builder)、观察者模式(Observer)、装饰器模式(Decorator)、代理模式(Proxy)、享元模式(Flyweight)、桥接...
此外,设计模式还有助于理解J2EE框架,如Spring框架就大量应用了设计模式,如依赖注入(DI)利用了工厂模式和构造器模式,AOP(面向切面编程)则采用了代理模式等。 总之,Java设计模式是软件开发中的重要工具,...
总的来说,设计模式是软件开发中的一种宝贵资源,通过学习和掌握设计模式,我们可以提高代码质量,提升团队间的沟通效率,同时为未来的扩展和维护打下坚实基础。对于任何想要深入理解软件设计的开发者来说,研究设计...
### 23种JAVA设计模式和15种J2EE设计模式详解 #### 一、JAVA设计模式概览 在软件工程领域,设计模式是一种在特定情境下解决常见问题的有效方法。Java作为一种广泛使用的编程语言,拥有丰富的设计模式库来帮助...
- **代码重用**:通过基类和设计模式,Kodigo鼓励代码的重用和模块化,降低项目维护成本,提高开发效率。 - **示例源代码**:提供的例子源程序是学习和理解框架使用的关键,它们展示了如何将框架中的各个组件和功能...
设计模式能够帮助开发者更好地理解和组织代码,使得软件架构更加清晰、易于维护。设计模式的核心在于它们能够解决常见的设计问题,并且通过提供经过验证的解决方案来提高代码质量。 根据提供的描述“设计模式精髓...
- 使用设计模式可以提高代码的复用性和可读性,使软件架构更加清晰。 2. **面向对象设计原则** - **单一职责原则**(Single Responsibility Principle, SRP):一个类应该只负责一项职责。 - **开放封闭原则**...
EAF.NET的目标是提高开发效率,通过预定义的模板、设计模式和组件,开发者可以快速构建出符合企业级标准的Web应用程序。 **三、三层架构** EAF.NET支持典型的三层架构,包括表示层(Presentation Layer)、业务...
这个知识框架涵盖了上午和下午两个部分的考试内容,通过XMind ZEN工具进行组织,帮助考生系统地理解和掌握相关知识。 首先,让我们深入探讨一下23种设计模式。设计模式是经过验证的解决方案,用于解决软件设计中...
根据提供的文件信息,可以提炼出与“1设计...综上所述,Mybatis的架构源码体现了设计模式在实际框架开发中的应用,其源码结构合理,各个组件协作流畅,使得开发者在使用Mybatis进行数据库操作时可以更高效、更便捷。
描述中提到的"一套精美的PB9架构框架"暗示了这个框架不仅功能齐全,而且在用户界面设计上可能具有良好的视觉效果。"内源完全版源码"表明该框架提供了完整的源代码,这意味着开发者可以深入理解框架的工作原理,并...