刘伟技术博客

专注软件架构、设计模式、重构、UML和OOAD!

自定义语言的实现——解释器模式(五)

18.5 再谈Context的作用        在解释器模式中,环境类Context用于存储解释器之外的一些全局信息,它通常作为参数被传递到所有表达式的解释方法interpret()中,可以在Context对象中存储和访问表达式解释器的状态,向表达式解释器提供一些全局的、公共的数据,此外还可以...

2012-07-04 00:13:57

阅读数 7107

评论数 5

自定义语言的实现——解释器模式(四)

18.4 完整解决方案       为了能够解释机器人控制指令,Sunny软件公司开发人员使用解释器模式来设计和实现机器人控制程序。针对五条文法规则,分别提供五个类来实现,其中终结符表达式direction、action和distance对应DirectionNode类、ActionNode类和...

2012-07-04 00:06:48

阅读数 8036

评论数 8

自定义语言的实现——解释器模式(三)

18.3 解释器模式概述        解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器。在某些情况下,为了更好地描述某一些特定类型的问题,我们可以创建一种新的语言,这种语言拥有自己的表达式和结构,即文法规则,这些问题的实例将对应为...

2012-07-04 00:00:38

阅读数 8367

评论数 4

自定义语言的实现——解释器模式(二)

18.2 文法规则和抽象语法树        解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。在正式分析解释器模式结构之前,我们先来学习如何表示一个语言的文法规则以及如何构造一棵抽象语法树。        在前面所提到的加法/减法解释器中,每一个...

2012-07-03 23:54:23

阅读数 8474

评论数 1

自定义语言的实现——解释器模式(一)

有朋友一直在等待我的解释器模式文稿,,现把某个版本发在博客上,欢迎大家讨论!        虽然目前计算机编程语言有好几百种,但有时候我们还是希望能用一些简单的语言来实现一些特定的操作,我们只要向计算机输入一个句子或文件,它就能够按照预先定义的文法规则来对句子或文件进行解释,从而实现相应的功能。...

2012-07-03 23:50:01

阅读数 10946

评论数 5

设计模式与足球(四)

行为型模式(下)    意大利昨晚太杯具了!!!不说了,继续把最后一部分写完。     (18) 备忘录模式:足球是圆的,一切皆有可能发生。要是有后悔药的话,如果能回到昨晚2012年欧洲杯决赛的中场休息,我相信普兰德利一定不会用莫塔换下蒙托利沃;如果能回到昨晚比赛开始,我相信一开始就不会让基耶...

2012-07-02 13:06:03

阅读数 6169

评论数 13

设计模式与足球(三)

行为型模式(上)       (13) 职责链模式:布冯手抛球给基耶利尼、基耶利尼传给皮尔洛、皮尔洛带球过人之后将球直塞给快速插上的巴洛特利,巴洛特利倒钩射门,球进了,球进了,又是巴洛特利,巴洛特利立功了,伟大的意大利前锋!他继承了意大利的光荣传统,巴乔、因扎吉、皮耶罗在这一刻灵魂附体!巴洛特利...

2012-07-02 02:23:00

阅读数 10191

评论数 11

设计模式与足球(二)

结构型模式       (6) 适配器模式:很多足球队都喜欢请外国教练(其中有一支我们都非常熟悉的国家队,名字偶就不说了,大家都懂的,),外国教练请回来通常很难跟队员直接交流(语言不通),因此需要配翻译,此时,翻译充当了教练和队员之间的适配器,负责协调教练和队员之间的交流。        ...

2012-07-02 01:49:04

阅读数 8257

评论数 6

设计模式与足球(一)

今天晚上2012年欧洲杯决赛(西班牙 VS 意大利),作为一名铁杆球迷,偶当然不会错过(请不要让我来预测比分,我不是章鱼,更何况这两个队我都非常喜欢,输赢我都很淡定,),在静候决赛的这段时间,突然萌发一个想法,将设计模式跟足球联系到一起写点啥,就像当年那篇知名度极高的《追MM与设计模式》一样,以供...

2012-07-01 23:45:00

阅读数 9477

评论数 10

实现对象的复用——享元模式(五)

14.5 单纯享元模式和复合享元模式        标准的享元模式结构图中既包含可以共享的具体享元类,也包含不可以共享的非共享具体享元类。但是在实际使用过程中,我们有时候会用到两种特殊的享元模式:单纯享元模式和复合享元模式,下面将对这两种特殊的享元模式进行简单的介绍:        1.单纯享...

2012-06-15 23:02:28

阅读数 8451

评论数 11

实现对象的复用——享元模式(四)

14.5 带外部状态的解决方案        Sunny软件公司开发人员通过对围棋棋子进行进一步分析,发现虽然黑色棋子和白色棋子可以共享,但是它们将显示在棋盘的不同位置,如何让相同的黑子或者白子能够多次重复显示且位于一个棋盘的不同地方?解决方法就是将棋子的位置定义为棋子的一个外部状态,在需要时再...

2012-06-15 22:55:03

阅读数 8396

评论数 6

实现对象的复用——享元模式(三)

14.3 完整解决方案        为了节约存储空间,提高系统性能,Sunny公司开发人员使用享元模式来设计围棋软件中的棋子,其基本结构如图14-4所示: 图14-4 围棋棋子结构图        在图14-4中,IgoChessman充当抽象享元类,BlackIgoChessma...

2012-06-15 22:45:58

阅读数 9499

评论数 6

实现对象的复用——享元模式(二)

享元模式结构较为复杂,一般结合工厂模式一起使用,在它的结构图中包含了一个享元工厂类,其结构图如图14-3所示:   图14-3 享元模式结构图       在享元模式结构图中包含如下几个角色:       ● Flyweight(抽象享元类):通常是一个接口或抽象类,在抽象享元类中声明了具...

2012-06-15 22:27:52

阅读数 10048

评论数 4

实现对象的复用——享元模式(一)

当前咱们国家正在大力倡导构建和谐社会,其中一个很重要的组成部分就是建设资源节约型社会,“浪费可耻,节俭光荣”。在软件系统中,有时候也会存在资源浪费的情况,例如在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高,内存属于计算机的“稀缺资源”,不应该用来“...

2012-06-15 22:24:11

阅读数 11883

评论数 13

如何在类图中标注设计模式(一)

随着设计模式的广泛使用,如何在结构图(主要是UML类图)中标注设计模式成为大家讨论的一个热点话题。设计模式是软件设计中的一些微结构,通过一种合理的方法来标注设计模式既有助于开发人员更好地进行设计软件系统,也有利于理解一些遗留系统,具体来说,设计模式的标注具有以下意义:      (1) 在系统设计...

2012-06-01 00:30:11

阅读数 5979

评论数 2

面向对象设计原则之迪米特法则

迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目。迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下: 迪米特法则(Law of  Demeter,...

2012-05-14 01:34:44

阅读数 24402

评论数 23

面向对象设计原则之合成复用原则

合成复用原则又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP),其定义如下: 合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合,而不是继承来达到复用的目的。 ...

2012-05-14 01:24:22

阅读数 26179

评论数 25

面向对象设计原则之接口隔离原则

接口隔离原则定义如下: 接口隔离原则(Interface  Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。       根据接口隔离原则,当一个接口太大时,我们需要将它...

2012-05-13 19:54:28

阅读数 23539

评论数 49

面向对象设计原则之依赖倒转原则

如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。依赖倒转原则是Robert C. Martin在1996年为“C++Reporter”所写的专栏Engineering Notebook的第三篇,后来加入到他在2002年出版的...

2012-05-13 19:43:25

阅读数 24147

评论数 40

面向对象设计原则之里氏代换原则

里氏代换原则由2008年图灵奖得主、美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出。其严格表述如下:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P...

2012-05-06 21:56:23

阅读数 41221

评论数 44

提示
确定要删除当前文章?
取消 删除
关闭
关闭