意图
Memento是行为模式的一种,他允许你在不暴露对象内部结构的情况下捕获其内部状态,以便稍后对象可以返回到这个状态。
问题
假设你在写一个文本编辑器。核心逻辑放在Editor主类中。另外一些特性,像文本格式化,内联图像等,放在不同的命令类中。
你决定让用户的操作变得可逆。换句话讲,要增加“撤销”功能。为了实现它,你需要在执行任何操作前保存Editor的状态。之后,如果用户决定还原他的一些操作,程序要从历史中拿出快照并恢复Editor到过去状态。
Abstract Factory是创建模式的一种,让你在没有指定具体类的情况下生产相关对象的系列。
假设你在写一个家具店的模拟器。你的代码由以下构成:
相关产品的系列,像:Chair + Sofa + CoffeeTable。
系列的几个变种。比如,产品Chair + Sofa + Coffee + CoffeeTable可以有这些变种:IKEA,VictorianStyle,ArtDeco。
你需要有种方式创建个性化的家具对象,以便它们能够匹配相同系列中的其他对象。在没有匹配到家具时,客户会感到失望。
另外,你不想在添加新产品或者产品系列时改变已经存在的代码。家具供应商常常会更新他们的目录,并且你不想每次在供货商改目录时修改你的核心代码。
Flyweight是结构模式的一种,通过在多个对象见共享对象状态的通用部分而不是让各个对象独自持有的方式来让你在可用的RAM中装入更多的对象。
在长时间工作后想要找些乐趣,你决定写一个简单的视频游戏。玩家能够在地图上移动并且可以相互射击。你决定实现一个真实的粒子系统并让它称为这个游戏的特性。子弹,导弹和爆炸产生的碎片应该到处飞舞并且能够给玩家分配经验。
过了一会,你最后一次提交代码并且把游戏发给了你的朋友,希望他能够立马玩起来。尽管游戏在你电脑上完美运行,但是你的朋友却不能玩起来。这个游戏总是在他的电脑上运行一会儿就崩溃。
在你看了日之后,发现是因为RAM不足导致了游戏崩溃。这个看起来和你的粒子系统有关。
每一个例子由一个包含和丰富数据的对象表示。在某一刻,当团战达到高潮,可用的RAM无法装入新创建的粒子,此时程序就崩溃了。