memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.
第一种就是采用两个不同的接口类来限制访问权限。这两个接口类中,一个提供比较完
备的操作状态的方法,我们称它为宽接口;而另一个则可以只是一个标示,我们称它为窄接
口。备忘录角色要实现这两个接口类。这样对于“备忘发起角色”采用宽接口进行访问,而
对于其他的角色或者对象则采用窄接口进行访问。
这种实现比较简单,但是需要人为的进行规范约束——而这往往是没有力度的。
第二种方法便很好的解决了第一种的缺陷:采用内部类来控制访问权限。将备忘录角色
作为“备忘发起角色”的一个私有内部类。好处我不详细解释了,看看代码吧就明白了。下
面的代码是一个完整的备忘录模式的教学程序。它便采用了第二种方法来实现备忘录模式。
还有一点值得指出的是,在下面的代码中,对于客户程序来说“备忘录管理者角色”是
不可见的,这样简化了客户程序使用备忘录模式的难度。下面采用“备忘发起角色”来调用
访问“备忘录管理者角色”,也可以参考门面模式在客户程序与备忘录角色之间添加一个门面角色。
class Originator{
//这个是要保存的状态
private int state= 90;
//保持一个“备忘录管理者角色”的对象
private Caretaker c = new Caretaker();
//读取备忘录角色以恢复以前的状态
public void setMemento(){
Memento memento = (Memento)c.getMemento();
state = memento.getState();
System.out.println("the state is "+state+" now");
}
//创建一个备忘录角色,并将当前状态属性存入,托给“备忘录管理者角色”存放。
public void createMemento(){
c.saveMemento(new Memento(state));
}
//this is other business methods...
//they maybe modify the attribute state
public void modifyState4Test(int m){
state = m;
System.out.println("the state is "+state+" now");
}
//作为私有内部类的备忘录角色,它实现了窄接口,可以看到在第二种方法中宽接
口已经不再需要
//注意:里面的属性和方法都是私有的
private class Memento implements MementoIF{
private int state ;
private Memento(int state){
this.state = state ;
}
private int getState(){
return state;
}
}
}
//测试代码——客户程序
public class TestInnerClass{
public static void main(String[] args){
Originator o = new Originator();
o.createMemento();
o.modifyState4Test(80);
o.setMemento();
}
}
//窄接口
interface MementoIF{}
//“备忘录管理者角色”
class Caretaker{
private MementoIF m ;
public void saveMemento(MementoIF m){
this.m = m;
}
public MementoIF getMemento(){
return m;
}
}
第三种方式是不太推荐使用的:使用clone 方法来简化备忘录模式。由于Java 提供了
clone 机制,这使得复制一个对象变得轻松起来。使用了clone 机制的备忘录模式,备忘录
角色基本可以省略了,而且可以很好的保持对象的封装。但是在为你的类实现clone 方法时
一定要慎重。
在Jsp应用中,我们通常有很多表单要求用户输入,比如用户注册,需要输入姓名和Email等, 如果一些表项用户没有填写或者填写错误,我们希望在用户按"提交Submit"后,通过Jsp程序检查,发现确实有未填写项目,则在该项目下红字显示警告或错误,同时,还要显示用户刚才已经输入的表项.
分享到:
相关推荐
备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作历史或者游戏进度...
备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。备忘录模式的核心思想是封装对象的状态,将其保存到一个独立的对象(备忘录)中,而...
备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。这个模式的名字来源于我们日常生活中使用的备忘录,它记录了一些重要的信息,当需要...
备忘录模式(Memento Pattern)是软件设计模式中的一种,属于行为模式。它提供了一种方式来恢复对象到之前的状态,即“撤销”操作。备忘录模式的核心思想是保存对象的内部状态,以便在需要时能恢复到这个状态,而...
备忘录模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在需要保护对象内部状态不被外部篡改的场景下。备忘录模式的核心思想是提供一种方法来捕获一个对象的内部状态,并在该对象之外保存这个状态...
备忘录模式是一种设计模式,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作或者游戏进度等场景,允许...
备忘录模式是一种在软件工程中广泛使用的结构型设计模式,其主要目的是为了在不破坏封装性的前提下,能够安全地保存对象的状态,并在需要时恢复到先前保存的状态。这种模式通常用于那些需要记录和回滚操作的重要场景...
备忘录模式(Memento Pattern)是软件设计模式中的一种行为模式,它的主要目的是在不破坏对象封装性的前提下,允许对象在特定时刻保存其内部状态,并能够在之后恢复到保存时的状态。这种模式广泛应用于撤销/重做功能...
备忘录模式是一种设计模式,它在不破坏封装性的前提下,保存对象的内部状态,以便在需要的时候恢复。在C#中,备忘录模式常用于实现撤销/重做功能,或者在需要记录和恢复对象状态的情况下。下面将详细解释备忘录模式...
备忘录模式是一种设计模式,属于行为模式类型,它的主要作用是保存对象的状态,以便在需要的时候能够恢复到之前的状态。这种模式的核心在于提供一种方式,可以在不破坏封装的前提下,捕获并存储一个对象的内部状态,...
备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到先前的状态。这种模式在需要撤销/重做功能、...
备忘录模式是一种在软件设计中广泛使用的结构型设计模式,它的主要目的是为了保存对象的状态,以便在需要的时候能够恢复到之前的状态。备忘录模式的核心思想是通过创建一个备忘录对象来存储原对象的状态,这个备忘录...
备忘录模式是一种在不破坏封装性的前提下,捕获一个对象的状态,并允许在未来的某个时刻恢复这个状态的设计模式。这种模式在很多场景下都非常有用,例如在游戏中保存进度、在编辑器中撤销/重做操作等。备忘录模式的...
备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复一个对象的内部状态。在C++中实现备忘录模式,可以有效地帮助开发者在程序运行过程中保存对象的状态,以便在需要时恢复到之前的状态,这...
备忘录模式笔记 备忘录模式(Memento)是一种非常有用的设计模式,它主要用于保存一个对象的某个状态,以便在适当的时候恢复对象。下面我们将对备忘录模式进行详细的解释和分析。 备忘录模式的定义 备忘录模式是...
备忘录模式是一种设计模式,它允许对象在不破坏封装性的前提下,捕获和存储其内部状态,以便在需要时能恢复到该状态。这种模式在需要保存和恢复对象状态,而又不想对外部世界暴露其内部实现细节时非常有用。备忘录...
备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要撤销/重做操作的场景,或者在...
备忘录模式是一种设计模式,属于行为模式类型,它的主要目的是在不破坏对象封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象到先前的状态。这种模式通常用于实现撤销/重做...
备忘录模式是一种设计模式,它允许我们保存和恢复对象的内部状态,而无需暴露对象的实现细节。这种模式在需要记录和恢复对象状态的情况下非常有用,比如在游戏中保存进度、在文档编辑器中撤销操作或者在复杂计算过程...
备忘录模式是设计模式中的一种,它主要用于保存对象的状态,以便在未来恢复到该状态。这个模式尤其适用于需要撤销/重做功能的场景。 备忘录模式的核心思想是创建一个备忘录对象,该对象存储另一个对象的内部状态,...