... 前言

二战期间,"Blue Funnel" 船运公司,需要从美国向英格兰,途径大西洋运送物资。

不幸的是,他们很快就成为德军舰队的主要攻击目标。

公司管理人员也及时意识到,在被攻击的过程中,年轻船员的伤亡比例很大。

于是他们雇佣了一个叫"Kurt Hahn"的人,此人聪明之极,成立了一个至今仍然存在的组织 -- “Outward Bound”。

该组织设立了一门为期28天的课程,专门向年轻船员传授经验 -- 如何结合在学校里学到的知识,在关键时刻更好地利用它们。

实践证明,这门课程能很好地降低年轻船员的伤亡率。

 ... 软件开发中的设计模式

设计模式,说白了,就是软件开发过程中的一些经验之道。

犹如理解了孙子兵法, 打仗就有可能打得轻松些,漂亮些。

要学习设计模式,最好对一种以上的面向对象的程序语言有深刻的理解。

否则,学习起来不仅痛苦,而且收效甚微。

当然,如果能通过设计模式,反过来学习面向对象程序语言,也许是一种不错的学习方式。

(等有一天,如果我成为了大学教师,我会试一下这种教学模式。我又开始做梦了,呵呵...)

  ... 如何学习设计模式

学习设计模式,关键是要有好的例子。

有的年轻人会买书;有的人甚至去读英文原版书;

其实大可不必。

打开cnblogs, 输入"设计模式", 会有很多很好的系列文章。认真拜读它们就可以了。

写这些系列的人都是经验丰富的高人,比起书本中的空洞说教要强很多。

 ... Decorator 模式在票据打印中的应用 -- 抛出问题

这个例子是所有例子中,最能解析Decorator模式的例子。

懂面向对象语言的人一看就清楚,AonTicketPrinter 和 CitiPrintTicket 是两个实体类,用来打印"Aon" 和 “Citi”两个客户的票据主体。

因各自的业务不同,故设计成两个不同的实体类。

客户现在要求,票据主体是必须的,但操作员在打印时,可以有选择性地在票头和票尾加打一些信息。

UI界面可能如下所示:

新手、经验不丰富的人、不懂设计模式的人,包括我自己 ....

使用面向对象设计思想,底层类的设计可能如下所示:

这种设计是恐怖的,是正确和有效的。

有的人会说,为什么不用逻辑判断,而要产生这么多继承类 ?

面向对象设计思想的基本原则是:对扩展开发,对修改封闭。

 ... Decorator 模式在票据打印中的应用 -- 解决问题 (附上代码)

分析发现,继承类的Printer方法,在任何时候,都调用了base.Print() ,只是在父类方法的基础上,添加了一些功能。

如果发现是这种场景,Decorator 就可以上场了。

这种设计是神奇的,是正确和有效的。

即使未来,增加 10000个新客户,我们要做的工作也是有趣的。毕竟不同的客户,业务总会有点差别。

Design Patter - Decorator Example

Design Patter vs2010 - Decorator Example

转载于:https://www.cnblogs.com/chinaairforce1/archive/2009/11/10/1599876.html

也谈设计模式,实例票据打印 解析 Decorator相关推荐

  1. (转)也谈设计模式,实例票据打印 解析 Decorator

    由于贴过来,由于其中有些图片太大,会影响整个博客的布局,所以只给出链接. http://www.cnblogs.com/chinaairforce1/archive/2009/11/10/159987 ...

  2. iOS中XML解析 (二) libxml2(实例:打印xml内容及存储到数组)

    关联:iOS中XML解析 (一) TBXML (实例:打印xml内容及存储到数组) 关于libxml库的基本使用,在http://xmlsoft.org/网上有文档. 准备工作: project=&g ...

  3. iOS中XML解析 (一) TBXML (实例:打印xml内容及存储到数组)

    关联:iOS中XML解析 (二) libxml2(实例:打印xml内容及存储到数组) 在时间上TBXML占优,libxml2支持了边下载边解析. 来源:http://www.codeios.com/f ...

  4. 结合电商项目谈设计模式

    结合电商项目谈设计模式 一.创建型(6种) 1.单例模式:创建一个仅能具有一个实例(仅能被实例化一次)的对象. 类框架:包括私有变量,私有构造方法和公共静态方法 实现方式: (1)懒汉式-线程不安全: ...

  5. .NET简谈设计模式之(策略模式)

    策略模式在我们日常开发中经常被用到,这篇文章不是策略模式的深入讨论和学术研究,只是让初学者能有个基本的了解. 什么叫策略:1. 可以实现目标的方案集合:2. 根据形势发展而制定的行动方针和斗争方法:3 ...

  6. 趣谈设计模式 | 代理模式(Proxy):利用代理来控制对象的访问

    文章目录 案例:房屋中介 代理模式 代理模式与装饰器模式 代理模式的应用 远程代理 虚拟代理 安全代理 智能引用代理 写时拷贝代理 总结 完整代码与文档 由于代理模式相较于前面的其他设计模式来说更加简 ...

  7. Net设计模式实例系列文章总结[转]

    1 什么是设计模式 设计模式是对在软件设计过程中重复出现的问题提出了一种比较好的解决方案.正如一位专家所说:设计模式是对程序设计人员经常遇到的设计问题的可再现的解决方案(The Smalltalk C ...

  8. 趣谈设计模式 | 状态模式(State):如何实现游戏中的状态切换?

    文章目录 案例:马里奥积分竞赛 有限状态机 分支逻辑法 查表法 状态模式 状态模式与策略模式 总结 完整代码与文档 案例:马里奥积分竞赛 喜欢马里奥的小伙伴们都应该知道,前不久马里奥为了庆祝35周年, ...

  9. ReportViewer单据票据打印,自动分页,每页显示固定行数,每页都显示表头

    报表工具用来用去,其实还是微软自带的ReportViewer比较轻量好用,一般需求完全够用.只是由于不常用,总会有解决一个问题过段时间又忘了怎么解决的问题.索性整理一下,当作笔记了. 在票据打印的时候 ...

  10. 从王者荣耀谈设计模式​

    软件开发中涉及到的设计模式很多,这里重点讨论工作中常见的一些设计模式,围绕王者荣耀中的场景进行展开. 1:策略模式 策略模式demo <?php //1:抽象策略接口:王者荣耀 abstract ...

最新文章

  1. java person抽象类_java 抽象类
  2. MVC通过ViewBag动态生成Html输出到View
  3. Unix command to find CPU Utilization
  4. 图片懒加载原理-实例二
  5. iOS native集成Weex js文件 不显示提示框问题
  6. Android中使用AlertDialog实现几种不同的对话框
  7. 小企业如何才能做强做大?
  8. 抖音打破了传统互联网的商业逻辑
  9. pandas合并groupby_Pandas中级技巧-数据的灵活运算
  10. Win10 UWP开发系列:开发一个自定义控件——带数字徽章的AppBarButton
  11. 关于String s = new String(xyz); 创建几个对象的问题
  12. 专题一:MATLAB基础知识
  13. ask调制与解调matlab仿真,ask调制与解调的matlab仿真.doc
  14. spring源码分析AOP原理图文详解
  15. 雅马哈音箱的usb驱动MAC-WINDOWS
  16. 土豆服务器延期修复,Uplay更新失败解决方法 教你对付土豆服务器!
  17. 万洲金业:白银继续走高,预期缓慢冲高
  18. css怎么设置图片卷角效果,CSS3 带分隔线卷角贴纸效果
  19. 统计学知识大梳理(三)
  20. Wireshark分析实际报文理解SSL(TLS)协议

热门文章

  1. Python 完整学习路线,非常赞!
  2. 撕掉单词书,每天花10分钟做这件事,英语水平暴涨!
  3. 深度学习2.0-2.tensorflow的基础操作之创建Tensor及应用场景
  4. 吴恩达深度学习——超参数调优
  5. 强化学习研究什么?用白话讲就是……
  6. flash与CPU连接及flash属性描述文件
  7. plt.Circle()
  8. 19【推荐系统9】WideDeep和DeepCross模型
  9. 2.3 Hightway Networks
  10. 终端terminal个性化配置