设计模式7(状态模式,备忘录模式)

状态模式

上下文对象通过改变状态来改变行为,看起来就像是改变了类型

分离状态,选择行为


状态模式


各种状态不能替换


上下文对象中维护的状态对象


分离状态,选择行为


策略模式


各种策略可以互相替换

   

观察者模式

   
行为是固定的,就是通知观察者,以达到触发联动的效果


单例模式


如有需要可以将状态设置为单例

   
       
       

备忘录模式

在不破坏原发器封装的前提下,捕获其内部状态(备忘录),并在对象外部由"备忘录管理者"保存管理,

以便在操作后,恢复状态

保存和恢复内部状态

TOriginator通过接口IMemento(窄接口)保存状态IState(宽接口)

|

|

TCareTaker.Create(TOriginator);

宽窄接口,使得只有原发器可以获取备忘录中状态


命令模式


可以用备忘录保存命令前的状态,以便命令回滚

 

原型模式

 
如果原发器中的大多数状态都要保存,可以在备忘录中存入一个原发器的实例

时间: 2024-11-06 03:53:14

设计模式7(状态模式,备忘录模式)的相关文章

Java设计模式(十) 备忘录模式 状态模式

(十九)备忘录模式 备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象. class Memento{ private String value; public Memento(String value){ this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } class Storage

设计模式(行为型)之备忘录模式(Memento Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之中介者模式(Mediator Pattern)>http://blog.csdn.net/yanbober/article/details/45533335 概述 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无

行为型模式--备忘录模式

备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当时恢复对象. 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. 主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态. 何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"

设计模式20:Memento 备忘录模式(行为型模式)

Memento 备忘录模式(行为型模式) 对象状态的回溯 对象状态的变化无端,如何回溯.恢复对象在某个点的状态? 动机(Motivation) 在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态.如果使用一些共有接口来让其他对象得到对象的状态,便会暴露对象的细节实现. 如何实现对象状态良好保存与恢复?同时又不会因而破坏对象本身的封装性. 意图(Intent) 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样

设计模式之十四:备忘录模式(Memento)

备忘录模式: 在不破换封装性的前提下,捕获一个对象的内部状态并将这个状态保存到对象外部,这样这个对象之后可以恢复到保存的状态. Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later UML图: 主要包括: Memento(Memento):存储Originator的内部状态.

大战设计模式【22】—— 备忘录模式

备忘录模式(Memento) 设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample 一.定义 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态 二.结构 Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储其当前内部状态,也可以使用备忘录来恢复其内部状态,一般需要保存内部状态的类设计为原发器. Memento(备忘录):存储原发器的状

【设计模式与Android】备忘录模式——在齐太史简

什么是备忘录模式 所谓备忘录模式,就是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以后可将这个对象恢复到原先保存的状态的设计模式. 备忘录模式的实现方式   备忘录模式的实现方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露. 民族英雄文天祥<正气歌>记载了一个"在齐太史简"的故事,我们先定义一个历史类: public class History { private String

设计模式(12)---备忘录模式

备忘录模式   Memento (行为型模式) 1.概述 备忘录模式:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态. 例如:一些软件提供的撤销功能,游戏的存档读档功能. 2.结构图 3.代码 1 /* 2 * 原发器类 Originator 3 */ 4 public class Role { 5 6 private int level ; 7 private int life ; 8 9 public Role() { 10

设计模式 --&gt; (13)备忘录模式

备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态 示例 玩游戏时都会保存进度,所保存的进度以文件的形式存在.这样下次就可以继续玩,而不用从头开始.这里的进度其实就是游戏的内部状态,而这里的文件相当于是在游戏之外保存状态.这样,下次就可以从文件中读入保存的进度,从而恢复到原来的状态.这就是备忘录模式. Memento类定义了内部的状态,而Caretake类是一个保存进度的管理者,GameRole类是游戏角色类.可以看到

大话设计模式第十八章--备忘录模式

<?php class Originator { private $state; public function __set($param, $value) { if ($param == 'state') { $this->state = $value; } } public function __get($param) { if ($param == 'state') { return $this->state; } } public function create_memento(