`
dingjob
  • 浏览: 183270 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

GOF模式之工厂,Adapter,模板,构建者模式---张逸《设计精要与模式》总结之一

阅读更多


    张逸的设计模式还是很有实践水平的,他会结合业务场景,指出为拟解决什么样的问题,而使用什么样的模式,其中的例子可以看出作者在实践方面有很深的造诣,不愧是微软出来的,崇拜之,学习之。之所以读这本书也是我同事极力推荐我的,我觉得他在架构方面还是不错的,他告诉我他设计模式方面也仅仅读过这一本书。
   准备写这样一个系列的博客,其中原有的一些例子,我觉得不够好,会自己修改下,也会有自己的心得体会,希望博友们支持探讨,废话少说,开始我们的模式之旅吧

   本回涉及的模式有四个,标题已经注明了:

1.应用场景:设计报表组件,支持水晶报表等
希望扩展:以后支持用友华表等。
分析:主要对象有报表对象—用于存储报表数据,报表格式对象--用于控制报表数据的显示格式,报表处理器对象—用于负责报表对象和报表处理器对象。

 

 

  

 

上面处理的问题,每次使用都要new Factory,采用静态类实现一个具体的Factory获取

  Public static class UtilManager{ Public static IreportFactory = new CellReportFactory(); } 

 

 

这种好处是,如果改变使用报表类型,只要修改一处就可以了。

 

 

小贴士:现在,使用哪个对象的问题早就由依赖注入解决了,但是这丝毫不影响abstractFatory 发挥他的作用,它的作用在与简化一系列对象的的创建,比如要创建三个对象,那就把他们作为一个对象组来创建,每次只要new 一个Factory 就可以了,可以转化为仅仅使用哪个factory的问题,而这个factory可以采用依赖注入的方式定义。抽象工厂用于创建一组对象,而工厂用于创建一个对象。

 

设计原则:对内部修改时开放的,对外部引用确定的,若非万不得已,不要修改已经提供的接口,这里所说的接口包含给别人用的任何类,而不仅仅限于系统间的接口,尽管系统间的接口更要考虑这个问题。

 

 

 

 


 

考虑业务变更,增加了一个需要创建别的对象的报表组件。
 

Adapter模式

 

 

Adapter Extends CrystalReportFactory implements IreportFactoryExtension

 
 

 

这样,原来的  IreportFactory factory = new CrystalReportFactoryAdapter (); 这个仍然成立

对外仍然是不变的。

唯一的缺点是需要强制类型转换才能使用

 

 

 

引申:考虑使用抽象还是使用接口,如何避免强制转化


使用模板模式+抽象工厂模式,共同的东西作为抽象工厂抽象方法,只有一个子类需要的作为实际的方法,需要的子类则覆盖这个方法,这样就避免了显式的转化。

小贴士 什么时候用抽象类,什么时候用接口。

子类中有共同的实现逻辑,选择抽象类。

存在明显的多重继承的可能

其它情况优先选择抽象类。


 

2.       应用场景:工厂设备 Machine Port等组成。Port有入口类型input,和出口类型output有的设备是一个Machine 带有输入输出口,有的是一个设备是一个Machine带有输入输出口。

希望扩展:满足以后一个机器多个输入输出接口等的定义。

分析:设备类有设备名称等。Machine 类有名称等,Port类有输入输出口等。

 

糟糕的设计调用时进行对象的组合,创建了MachineNport等对象,通过set方法组合起来。

 

 
 

使用builder模式

 


 

进阶,如何组装执行这些对象,需要一个导演类,这个导演类由Factory来承担(应用模式自如的时候自然会想到需要怎样的模式来组织过程,对于创建对象的一搬就是Factory模式了

 

InputEQPBuilder builder = new InputEQPBuilder(); Equipment eqp = LCDFactory.createEQP(builder,“inputEQPBuilder”); 

 

 

 

  • 大小: 2.5 KB
  • 大小: 2.3 KB
  • 大小: 4.1 KB
  • 大小: 4.1 KB
  • 大小: 2.4 KB
  • 大小: 2.8 KB
分享到:
评论

相关推荐

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 建造者模式(Builder):将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - 对象池模式(Pool):通过重用已创建的对象来减少对象的创建和销毁次数。 2. **结构型模式**:这类模式...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象编程中最核心的设计原则之一。这些模式可以帮助开发者解决常见的编程问题,并提高代码的可复用性和可维护性。 #### 创建型模式 创建型模式关注的是对象...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的核心内容之一。本文旨在深入解析这些设计模式,并通过C++实现来帮助读者更好地理解和应用这些模式。 #### 1. 创建型模式 创建型模式关注的是对象的...

    GOF设计模式中英文+设计模式精解中英文

    GOF(Gang of Four)设计模式,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位专家在他们的著作《设计模式:可复用面向对象软件的基础》中提出,被誉为设计模式的经典之作。本资源包含了GOF设计...

    设计模式精解- GoF 23种设计模式解析附C++实现源码

    设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...

    设计模式精解-GoF23种设计模式解析附C++实现源码

    - 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - 结构型原型模式(Prototype):用原型实例指定创建对象的种类,并通过复制这个原型来创建新的对象。 2...

    设计模式精解-GoF 23种设计模式解析附

    GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象编程中最核心的设计原则之一。这些模式可以帮助程序员解决常见的编程问题,并提高代码的可维护性和可扩展性。 #### 0.1 设计模式解析(总序) 设计模式...

    GOF 设计模式 中文 高清

    《GOF设计模式》是软件工程领域的一部经典著作,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师合著,因此常被称为“Gang of Four”(GOF)的设计模式。这本书详尽地阐述了23种设计模式,这些...

    GOF23种设计模式

    GOF(GoF)23种设计模式,是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大神在他们的著作《设计模式:可复用面向对象软件的基础》中提出的,这些模式分为创建型、结构型和行为型三大类。...

    经典教程GOF设计模式(中文版)

    《经典教程GOF设计模式(中文版)》是学习软件设计模式的重要参考资料,它涵盖了GOF(Gamma, Helm, Johnson, Vlissides)四位大师提出的23种经典设计模式。设计模式是软件工程中经过实践验证的解决常见问题的最佳方案...

    GOF-设计模式-Design Patterns-英文原版-高清-有目录-有页码

    ### GOF设计模式详解 #### 一、设计模式概述 **设计模式**(Design Patterns)是软件工程中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。本章节将从多个角度对设计模式...

    设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版

    《设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版》是一份深入探讨软件工程中经典设计模式的重要资料,涵盖了面向对象编程中的核心设计原则和实践。这份资源主要关注GoF(Gang of Four,即《设计模式:可...

Global site tag (gtag.js) - Google Analytics