敏捷软件开发(原则、模式与实践)第三部分 设计模式-读书笔记1

第十三章 COMMAND模式和ACTIVE OBJECT模式

COMMAND模式:

该模式仅由一个具有唯一方法的接口。它只封装了一个没有任何变量的函数。
通过对命令概率的封装,该模式解除了系统的逻辑互连关系和实践连接的设备之间的耦合。
另一个常见用法:创建和执行食物操作。
COMMAND模式中do()方法:记住它所执行的操作的细节;
增加了undo()方法:取消do()方法中执行的操作,并把系统回复到原先的状态。

ACTIVE OBJECT模式

ACTIVE OBJECT模式是最好使用COMMAND模式的地方之一。是实现多线程控制的技术。
采用ACTIVE OBJECT模式的变体(Variations)去构建多线程系统已经是并一个常见的实践。此类线程被称为run-to-completion任务(RTC)。RTC意味着Command实例不会阻塞。RTC共享同一个运行时堆栈。

COMMAND模式可以应用于多种不同的用途:数据库事务操作、设备控制、多线程核心以及GUI的do/undo管理。

第十四章 TEMPLATE METHOD模式和STRATEGY模式:继承与委托

优先使用对象组合(Object Composition)而不是类继承(Class Inheritance).
本章两个模式,归纳了继承和委托之间的区别。TEMPLATE METHOD模式和STRATEGY模式所需要解决的问题时类似的,常常可互换使用。
TEMPLATE METHOD模式:使用继承来解决问题。
STRATEGY模式:使用委托来解决问题。

TEMPLATE METHOD模式和STRATEGY模式:都可以分离通用的算法和具体的上下文。
为遵循依赖倒置原则(DIP):要确保通用的算法不要依赖于具体的实现。通用的算法和具体的实现都依赖于抽象。

TEMPLATE METHOD模式

该模式:把所有通用代码放入一个抽象基类(Abstract Base Class)的实现方法中。这个实现方法:完成了这个通用算法,但是将所有的实现细节都交付给该基类的抽象方法。

STRATEGY模式

该模式:使用一种非常不同的方法来倒置通用算法和具体实现之间的依赖关系。
不将通用的应用算法放进一个抽象基类中,而是将它放进具体类中。
把通用算法必须调用的抽象方法定义在A接口中。
从这个接口A的派生出strateg类,并把它传给具体类中。之后,具体类就可以把具体工作委托给这个接口A去完成。

TEMPLATE METHOD模式和STRATEGY模式:都可以用来分离高层的算法和低层的具体实现细节。允许高层的算法独立于它的具体实现袭击重用。
STRATEGY模式:也允许具体实现细节独立于高层的算法重用。

第十五章 FACADE模式和MEDIATOR模式

这章的两个模式有着共同的目的:它们都把某种策略施加到另外一组对象上。
FACADE模式:从上面施加策略,使用时明显且受限的。
MEDIATOR模式:从下面施加策略,使用则是不明显且不受限制的。

FACADE模式

该模式:当想要为一组具体复杂且全面的接口的对象提供一个简单且特定的接口时,运用。
Facades通常是约定的关注点,每个人都同意去使用该facade而不是隐藏于其下的对象。

MEDIATOR模式

该模式:以隐藏且不受限的方法来施加它的策略。如果策略隐藏且有针对性,用MEDIATOR模式是更好的选择。
Mediator则对用户是隐藏的,它的策略是既成事实的而不是一项约定事务。

第十六章 SINGLETON模式和MONOSTATE模式

SINGLETON模式

该模式:实例是通过公有的静态方法Instance访问的。即使被多次调用,每次返回的都是指向完全相同的实例的引用。

SINGLETON模式的好处

  • 跨平台:使用合适的中间件;
  • 适用于任何类:只需把一个类的构造函数变成私有的,且在其中增加相应的静态函数和变量,就可把这个类变成SINGLETON;
  • 可以透过派生创建:给定一个类,可以创建它的一个SINGLETON子类;
  • 延迟求值:如果SINGLETON从未使用过,那就决不会创建它。

SINGLETON模式的代价

  • 摧毁方法为定义:没有好的方法去Destroy;
  • 不能继承:从SINGLETON类派生出来的类并不是SINGLETON。如要成为SINGLETON,必须要增加所需的静态函数和变量;
  • 效率问题:每次调用Instance方法都会执行if语句。
  • 不透明性:SINGLETON的使用者指导他们正在使用一个SINGLETON,因为他们必须要调用instance方法。
MONOSTATE模式

该模式:是另外一种获取对象单一性的方法。

** MONOSTATE模式的好处**

  • 透明性:使用Monostate对象和使用常规(Regular)对象没什么区别。使用者不需要知道对象是MONOSTATE。
  • 可派生性:MONOSTATE的派生类都是MONOSTATE,他们共享相同的静态变量。
  • 多态性:由于MONOSTATE的方法不是静态的,可在派生类中覆写它们。

** MONOSTATE模式的代价**

  • 不可转换性:不能透过派生把常规类转换成MONOSTATE类。
  • 效率问题:MONOSTATE是真正的对象,导致很多的创建和摧毁开销。
  • 内存占用:即使从未使用MONOSTATE,它的变量也要占据内存空间。
  • 平台局限性:MONOSTATE不能跨多个JVM或多个平台工作。

SINGLETON模式:强制结构上的单一性,它放置创建多个对象实例;
MONOSTATE模式:强制行为上的单一性,而没有强加结构方面的限制。

MONOSTATE类的测试用例对SINGLETON类是有效的,但是SINGLETON的测试用例不适用于MONOSTATE类。

SINGLETON模式:使用私有构造函数,一个静态变量,以及一个静态方法对实例化进行控制和限制。
MONOSTATE模式:只是简单地把对象的所有变量变成静态的。

如果希望透过派生类去约束一个现存类,并且不介意它的所有调用者都必须要调用instance()方法来获取访问权,用SINGLETON模式最适合。
如果希望类的单一性本质对使用者透明,或希望使用单一对象的多态派生对象,用MONOSTATE模式最适合。

第十七章 NULL OBJECT模式

该模式:消除对null进行检查的需要,并且有助于简化代码。
通过NULL类实现了接口中的所有方法,但方法中“什么也没做”。“什么也没做”的含意和具体的方法有关。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355