当前位置:C++技术网 > 资讯 > 菜鸟解析设计模式:7

菜鸟解析设计模式:7

更新时间:2016-09-10 14:27:44浏览次数:1+次

声明:本文参考郗晓勇的文章《23种设计模式》

19.备忘录

发起者就是普通的类。它把它里边的状态通过回忆类,进行记录。然后传到回忆录管理者。

估计这东西可能是纯粹为了调用时候的规范和方便而做的,虽然写的时候很不方便。

原文:

意图:

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

适用性:

必须保存一个对象在某一个时刻的(部分)状态这样以后需要时它才能恢复到先前的状态。

如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。




20.观察者

左上那个类翻译为主题,因为这东西做 UI 肯定会用到。“主题”类中的“通知”函数,往往是定时调用(可以在一些地方看到FPS,FPS的意思是每秒调用多少次“通知”函数),或者在特定条件时调用。

“主题”通过调用“被观察者”的 Update 来更新“被观察者”的状态。比如一个按钮,你把鼠标移动到上面,它变色了。因为“主题”检测到你的鼠标放在按钮上,就在某一次 Update 中改变了按钮的颜色。

不止是 UI,凡是需要不断地检测或更新的地方,这模式都用的风生水起。

只要观察者处在被监视状态,很多时候无论是否需要有变化,都会定时调用 Update 函数。当时强哥教我这模式,说了足有半个小时,我才明白了不必做判断这一点。因为除了“是否被监视”之外,可以选择不做其他判断,所以简单。





21.状态

Handle 本该翻译一下。但是在 Windows 编程中,Handle 翻译为句柄。也就是说,Handle 函数也许不止是直接操作,更可以是拿到一个句柄后进行操作。考虑后觉得应该保留这个意思,就没有翻译。其他的原文说的很明白了。

原文:

意图:

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

适用性:

一个对象的行为取决于它的状态并且它必须在运行时刻根据状态改变它的行为。

一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。