- 博客(25)
- 收藏
- 关注
转载 MVC已死?是时候用MOVE了
参考资料:MVC is dead, it's time to MOVE on. http://cirw.in/blog/time-to-move-on 作者:Conrad Irwin — June 2012 MVC模式是一个很了不起的主意,它广泛应用于编程实践中。“数据模型(Model)”可以封装与应用程序的业务逻辑相关的数据及对数据的处理方法;“视图层(View)”能够实现
2012-07-29 02:17:16 9315 1
原创 外观模式及其改进(三):外观类的单例化
由于外观类维持了对多个子系统类的引用,外观对象在系统运行时将占用较多的系统资源,因此需要对外观对象的数量进行限制,避免系统资源的浪费。可以结合单例模式对外观类进行改进,将外观类设计为一个单例类。通过对外观模式单例化,可以确保系统中只有唯一一个访问子系统的入口,降低系统资源的消耗。单例化之后的外观模式结构如图6所示:图6 单例外观类结构图 在图6中,外观类Facade被设计为单例类,在其
2012-07-29 01:43:17 4897 4
原创 外观模式及其改进(二):抽象外观类的引入
在通用的外观模式结构图中,如果需要增加、删除或更换与外观类交互的子系统类,必须修改外观类或客户端的源代码,这将违背开闭原则,因此我们可以通过引入抽象外观类来对系统进行改进,在一定程度上解决该问题。在引入抽象外观类之后,客户端可以针对抽象外观类进行编程,对于新的业务需求,不需要修改原有外观类,而对应增加一个新的具体外观类,由新的具体外观类来关联新的子系统对象,同时通过修改配置文件来达到不修改任何源代
2012-07-29 00:26:02 5366 3
原创 外观模式及其改进(一):外观模式概述
外观模式是使用频率最高的结构型设计模式之一,无论是在Web应用软件或是桌面应用软件,还是在移动应用软件中,外观模式都得到了广泛的应用。 外观模式要求外部与一个子系统的通信可以通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的入口,它定义了一个高层接口,这个接口使得相关子系统更加容易使用。如果没有外观角色,每个客户端可能需要和多个子系统之间进行复杂的交互,系统的耦合度将很大,如
2012-07-29 00:03:52 4978 2
原创 甘特图版2012年伦敦奥运会赛程表
7月27日,2012年伦敦奥运会就要隆重举行了,工作之余,偶做了个甘特图版2012年伦敦奥运会赛程表,以飨观众,。2012年伦敦奥运会赛程表项目/日期7.25周三7.26周四7.27周五7.28周六7.29周日7.30周一7.31周二8.1周三8.2周四8.3周五8.4周六8.5周日8.6周一8.7周二8.8周三8.9周四8.10周五8.11周六8.12周日金牌数开幕式闭幕式足球112射箭1111
2012-07-26 00:09:45 7299 1
翻译 设计模式真的能改善软件质量吗?(二)
接前一篇文章: “设计模式真的能改善软件质量吗?(一)”结果分析 选取三个知名的设计模式:组合模式、抽象工厂模式、享元模式 (1) 组合模式 结论:组合模式对大部分质量属性都有正影响,可伸缩性(Scalability)和健壮性(Robustness)除外。 (2) 抽象工厂模式 结论:总体上来说,抽象工厂模式对软件质量属
2012-07-25 00:16:07 16165 40
翻译 设计模式真的能改善软件质量吗?(一)
本文是加拿大蒙特利尔大学(University of Montreal)Foutse Khomh和Yann-Gaël Guéhéneuc开展的一项经验性软件研究的成果,他们已在此基础上发表了相关论文。 为了让国内开发人员也能够了解这项研究并能够参与其中,我将几篇相关论文的核心部分翻译并整理为本文,以供参考! 很多人都宣称设计模式的使用会给一些软件质量属性带来正面的影响,将改善
2012-07-24 23:05:01 11811 31
原创 从研究的角度来思考软件设计模式——研究方向
近期在做一些关于软件设计模式的研究工作,通过广泛的收集与阅读,细致的分析与整理,现将设计模式的几个主要研究方向罗列如下: (1) 设计模式的可视化研究(Visualization) 如何在复杂的系统结构(UML图、源代码等)中将设计模式实例标注出来,包括模式的标注和模式角色的标注。研究热度:★★★☆☆研究难度:★★★☆☆ (2) 设计模式的形式化研究(Formalization)
2012-07-24 21:23:59 5014
原创 对象间的联动——观察者模式(六)
22.6 观察者模式与MVC 在当前流行的MVC(Model-View-Controller)架构中也应用了观察者模式,MVC是一种架构模式,它包含三个角色:模型(Model),视图(View)和控制器(Controller)。其中模型可对应于观察者模式中的观察目标,而视图对应于观察者,控制器可充当两者之间的中介者。当模型层的数据发生改变时,视图层将自动改变其显示内容。如图22-7所
2012-07-06 00:15:45 16595 14
原创 对象间的联动——观察者模式(五)
22.5 观察者模式与Java事件处理 JDK 1.0及更早版本的事件模型基于职责链模式,但是这种模型不适用于复杂的系统,因此在JDK 1.1及以后的各个版本中,事件处理模型采用基于观察者模式的委派事件模型(DelegationEvent Model, DEM),即一个Java组件所引发的事件并不由引发事件的对象自己来负责处理,而是委派给独立的事件处理对象负责。
2012-07-06 00:09:05 14095 10
原创 对象间的联动——观察者模式(四)
22.4 JDK对观察者模式的支持 观察者模式在Java语言中的地位非常重要。在JDK的java.util包中,提供了Observable类以及Observer接口,它们构成了JDK对观察者模式的支持。如图22-5所示:图22-5 JDK提供的Observable类及Observer接口结构图 (1) Observer接口 在java.util.
2012-07-06 00:02:15 14555 8
原创 对象间的联动——观察者模式(三)
23.3 完整解决方案 为了实现对象之间的联动,Sunny软件公司开发人员决定使用观察者模式来进行多人联机对战游戏的设计,其基本结构如图22-4所示:图22-4 多人联机对战游戏结构图 在图22-4中,AllyControlCenter充当目标类,ConcreteAllyControlCenter充当具体目标类,Observer充当抽象观察者,Player
2012-07-05 23:53:01 18858 26
原创 对象间的联动——观察者模式(二)
22.2 观察者模式概述 观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。 观察者模
2012-07-05 23:34:09 25239 13
原创 对象间的联动——观察者模式(一)
观察者模式是设计模式中的“超级模式”,其应用随处可见,在之后几篇文章里,我将向大家详细介绍观察者模式。 “红灯停,绿灯行”,在日常生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的城市交通。当红灯亮起,来往的汽车将停止;而绿灯亮起,汽车可以继续前行。在这个过程中,交通信号灯是汽车(更准确地说应该是汽车驾驶员)的观察目标,而汽车是观察者。随着交通信号灯的变化,汽车的行为也将随之
2012-07-05 23:03:41 24360 16
原创 数学表达式解析器简介
在实际项目开发中如果需要解析数学公式,无须再运用解释器模式进行设计,可以直接使用一些第三方解析工具包,它们可以统称为数学表达式解析器(Math Expression Parser, MEP),如Expression4J、Jep、JbcParser、Symja、Math Expression String Parser(MESP)等来取代解释器模式,它们可以方便地解释一些较为复杂的文法,功能强大
2012-07-04 00:32:47 11720 2
原创 自定义语言的实现——解释器模式(六)
18.6 解释器模式总结 解释器模式为自定义语言的设计和实现提供了一种解决方案,它用于定义一组文法规则并通过这组文法规则来解释语言中的句子。虽然解释器模式的使用频率不是特别高,但是它在正则表达式、XML文档解释等领域还是得到了广泛使用。与解释器模式类似,目前还诞生了很多基于抽象语法树的源代码处理工具,例如Eclipse中的Eclipse AST,它可以用于表示Java语言的语法结
2012-07-04 00:23:37 9335 14
原创 自定义语言的实现——解释器模式(五)
18.5 再谈Context的作用 在解释器模式中,环境类Context用于存储解释器之外的一些全局信息,它通常作为参数被传递到所有表达式的解释方法interpret()中,可以在Context对象中存储和访问表达式解释器的状态,向表达式解释器提供一些全局的、公共的数据,此外还可以在Context中增加一些所有表达式解释器都共有的功能,减轻解释器的职责。 在上面的机
2012-07-04 00:13:57 9718 10
原创 自定义语言的实现——解释器模式(四)
18.4 完整解决方案 为了能够解释机器人控制指令,Sunny软件公司开发人员使用解释器模式来设计和实现机器人控制程序。针对五条文法规则,分别提供五个类来实现,其中终结符表达式direction、action和distance对应DirectionNode类、ActionNode类和DistanceNode类,非终结符表达式expression和composite对应Sentence
2012-07-04 00:06:48 11018 11
原创 自定义语言的实现——解释器模式(三)
18.3 解释器模式概述 解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器。在某些情况下,为了更好地描述某一些特定类型的问题,我们可以创建一种新的语言,这种语言拥有自己的表达式和结构,即文法规则,这些问题的实例将对应为该语言中的句子。此时,可以使用解释器模式来设计这种新的语言。对解释器模式的学习能够加深我们对面向对象思
2012-07-04 00:00:38 12331 5
原创 自定义语言的实现——解释器模式(二)
18.2 文法规则和抽象语法树 解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。在正式分析解释器模式结构之前,我们先来学习如何表示一个语言的文法规则以及如何构造一棵抽象语法树。 在前面所提到的加法/减法解释器中,每一个输入表达式,例如“1 + 2 + 3 – 4 + 1”,都包含了三个语言单位,可以使用如下文法规则来定
2012-07-03 23:54:23 12151 3
原创 自定义语言的实现——解释器模式(一)
有朋友一直在等待我的解释器模式文稿,,现把某个版本发在博客上,欢迎大家讨论! 虽然目前计算机编程语言有好几百种,但有时候我们还是希望能用一些简单的语言来实现一些特定的操作,我们只要向计算机输入一个句子或文件,它就能够按照预先定义的文法规则来对句子或文件进行解释,从而实现相应的功能。例如提供一个简单的加法/减法解释器,只要输入一个加法/减法表达式,它就能够计算出表达式结果,如图18-
2012-07-03 23:50:01 15761 6
原创 设计模式与足球(四)
行为型模式(下) 意大利昨晚太杯具了!!!不说了,继续把最后一部分写完。 (18) 备忘录模式:足球是圆的,一切皆有可能发生。要是有后悔药的话,如果能回到昨晚2012年欧洲杯决赛的中场休息,我相信普兰德利一定不会用莫塔换下蒙托利沃;如果能回到昨晚比赛开始,我相信一开始就不会让基耶利尼上场,如果能回到......(再回可能意大利就被德国淘汰了,)能回到吗?回不到哦,要是能回到过去的
2012-07-02 13:06:03 7985 13
原创 设计模式与足球(三)
行为型模式(上) (13) 职责链模式:布冯手抛球给基耶利尼、基耶利尼传给皮尔洛、皮尔洛带球过人之后将球直塞给快速插上的巴洛特利,巴洛特利倒钩射门,球进了,球进了,又是巴洛特利,巴洛特利立功了,伟大的意大利前锋!他继承了意大利的光荣传统,巴乔、因扎吉、皮耶罗在这一刻灵魂附体!巴洛特利代表了意大利足球悠久的历史和传统,在这一刻他不是一个人在战斗,他不是一个人! 在此,足球
2012-07-02 02:23:00 11911 11
原创 设计模式与足球(二)
结构型模式 (6) 适配器模式:很多足球队都喜欢请外国教练(其中有一支我们都非常熟悉的国家队,名字偶就不说了,大家都懂的,),外国教练请回来通常很难跟队员直接交流(语言不通),因此需要配翻译,此时,翻译充当了教练和队员之间的适配器,负责协调教练和队员之间的交流。 例如:pass --> shoot --> goal 转换 传球 --> 射门 --> 进球
2012-07-02 01:49:04 10150 8
原创 设计模式与足球(一)
今天晚上2012年欧洲杯决赛(西班牙 VS 意大利),作为一名铁杆球迷,偶当然不会错过(请不要让我来预测比分,我不是章鱼,更何况这两个队我都非常喜欢,输赢我都很淡定,),在静候决赛的这段时间,突然萌发一个想法,将设计模式跟足球联系到一起写点啥,就像当年那篇知名度极高的《追MM与设计模式》一样,以供娱乐!,话不多说,即刻动手! 创建型模式 (1) 工厂方法模式:近年
2012-07-01 23:45:00 13216 10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人