`
clq9761
  • 浏览: 597072 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

备忘录模式

阅读更多

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


  优点:
  1、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,
     这时使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。
  2、本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理
     他们所需要的这些状态的版本。   
  3、当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。

  缺点:
  1、如果发起人角色的状态需要完整地存储到备忘录对象中,那么在资源消耗上面备忘录对象会很昂贵。
  2、当负责人角色将一个备忘录 存储起来的时候,负责人可能并不知道这个状态会占用多大的存储空间,
     从而无法提醒用户一个操作是否很昂贵。
  3、当发起人角色的状态改变的时候,有可能这个协议无效。如果状态改变的成功率不高的话,
     不如采取“假如”协议模式。

 

 

/**
 * 备忘录:负责存储Originator对象的内部状态,并可防止Originator以外的其它对象访问备忘录
 *
 */
public class Memento {
	
	// 需要保存的数据属性,可以是多个
	private String state;
	
	public Memento(String state){
		this.state = state;
	}

	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}	
}

 

/**
 * 管理者类:负责备忘录Memento,不能对Memento的内容进行访问或者操作。
 *
 */
public class Caretaker {
	
	// 得到或设置备忘录
	private Memento memento;

	public Memento getMemento() {
		return memento;
	}

	public void setMemento(Memento memento) {
		this.memento = memento;
	}	
}

 

/**
 * 发起人(Originator):负责创建一个备忘录(Memento),用以记录当前时刻它的内部状态,
 *    并可使用备忘录恢复内部状态。发起人可根据需要决定备忘录存储发起人的哪些内部状态。
 *
 */
public class Originator {
	
	// 需要保存的属性,可能有多个
	private String state;
	
	// 创建备忘录,将当前需要保存的信息导入,并实例化出一个Memento对象
	public Memento createMemento(){
		return (new Memento(state));
	}
	
	// 恢复备忘录,将Memento导入并恢复相关数据
	public void setMemento(Memento memento){
		this.state = memento.getState();
	}
	
	// 显示数据
	public void show(){
		System.out.println("state="+state);
	}

	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}
}

 

public class Main {

	public static void main(String[] args) {
		
		// 发起人初始状态设为on
		Originator o =new Originator();
		o.setState("on");
		o.show();
		
		// 管理者设置备忘录(保存发起人的状态)
		Caretaker c = new Caretaker();
		c.setMemento(o.createMemento());
		
		// 发起人状态改变
		o.setState("off");
		o.show();
		
		// 发起人恢复状态(管理者保存的状态,从管理者处获得备忘录)
		o.setMemento(c.getMemento());
		o.show();
	}

}

 

 

输出结果如下:

 

state=on
state=off
state=on

 

  • 大小: 20.5 KB
分享到:
评论

相关推荐

    备忘录模式.rar备忘录模式.rarjava设计模式

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作历史或者游戏进度...

    设计模式-备忘录模式(讲解及其实现代码)

    备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。备忘录模式的核心思想是封装对象的状态,将其保存到一个独立的对象(备忘录)中,而...

    java设计模式-备忘录模式源代码

    备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。这个模式的名字来源于我们日常生活中使用的备忘录,它记录了一些重要的信息,当需要...

    设计模式之备忘录模式

    备忘录模式(Memento Pattern)是软件设计模式中的一种,属于行为模式。它提供了一种方式来恢复对象到之前的状态,即“撤销”操作。备忘录模式的核心思想是保存对象的内部状态,以便在需要时能恢复到这个状态,而...

    设计模式之备忘录模式,内含可运行代码及详细解释

    备忘录模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在需要保护对象内部状态不被外部篡改的场景下。备忘录模式的核心思想是提供一种方法来捕获一个对象的内部状态,并在该对象之外保存这个状态...

    备忘录模式Demo

    备忘录模式是一种设计模式,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作或者游戏进度等场景,允许...

    设计模式_备忘录模式.zip

    备忘录模式是一种在软件工程中广泛使用的结构型设计模式,其主要目的是为了在不破坏封装性的前提下,能够安全地保存对象的状态,并在需要时恢复到先前保存的状态。这种模式通常用于那些需要记录和回滚操作的重要场景...

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

    备忘录模式(Memento Pattern)是软件设计模式中的一种行为模式,它的主要目的是在不破坏对象封装性的前提下,允许对象在特定时刻保存其内部状态,并能够在之后恢复到保存时的状态。这种模式广泛应用于撤销/重做功能...

    C#备忘录模式 代码例子

    备忘录模式是一种设计模式,它在不破坏封装性的前提下,保存对象的内部状态,以便在需要的时候恢复。在C#中,备忘录模式常用于实现撤销/重做功能,或者在需要记录和恢复对象状态的情况下。下面将详细解释备忘录模式...

    备忘录模式(Memento Pattern) 1. 什么是备忘录模式? 2. 为什么需要备忘录模式? 3. 备忘录模式的核心概念 4. 备忘录模式的结构 5. 备忘录模式的基本实现 5.1 简单的文本

    备忘录模式(Memento Pattern) 1. 什么是备忘录模式? 2. 为什么需要备忘录模式? 3. 备忘录模式的核心概念 4. 备忘录模式的结构 5. 备忘录模式的基本实现 5.1 简单的文本编辑器示例 6. 备忘录模式的进阶实现 6.1 ...

    备忘录模式实现及案例

    备忘录模式是一种设计模式,属于行为模式类型,它的主要作用是保存对象的状态,以便在需要的时候能够恢复到之前的状态。这种模式的核心在于提供一种方式,可以在不破坏封装的前提下,捕获并存储一个对象的内部状态,...

    C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式

    备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到先前的状态。这种模式在需要撤销/重做功能、...

    设计模式之备忘录模式的Java版本实现

    备忘录模式是一种在软件设计中广泛使用的结构型设计模式,它的主要目的是为了保存对象的状态,以便在需要的时候能够恢复到之前的状态。备忘录模式的核心思想是通过创建一个备忘录对象来存储原对象的状态,这个备忘录...

    设计模式 - 备忘录模式(C++实例)

    备忘录模式是一种在不破坏封装性的前提下,捕获一个对象的状态,并允许在未来的某个时刻恢复这个状态的设计模式。这种模式在很多场景下都非常有用,例如在游戏中保存进度、在编辑器中撤销/重做操作等。备忘录模式的...

    备忘录模式 C++ 实现

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复一个对象的内部状态。在C++中实现备忘录模式,可以有效地帮助开发者在程序运行过程中保存对象的状态,以便在需要时恢复到之前的状态,这...

    备忘录模式笔记1

    备忘录模式笔记 备忘录模式(Memento)是一种非常有用的设计模式,它主要用于保存一个对象的某个状态,以便在适当的时候恢复对象。下面我们将对备忘录模式进行详细的解释和分析。 备忘录模式的定义 备忘录模式是...

    备忘录模式代码示例

    备忘录模式是一种设计模式,它允许对象在不破坏封装性的前提下,捕获和存储其内部状态,以便在需要时能恢复到该状态。这种模式在需要保存和恢复对象状态,而又不想对外部世界暴露其内部实现细节时非常有用。备忘录...

    备忘录模式-极客学院-java-课件代码

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要撤销/重做操作的场景,或者在...

    备忘录模式t31

    备忘录模式是一种设计模式,属于行为模式类型,它的主要目的是在不破坏对象封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象到先前的状态。这种模式通常用于实现撤销/重做...

    14备忘录模式1

    备忘录模式是一种设计模式,它允许我们保存和恢复对象的内部状态,而无需暴露对象的实现细节。这种模式在需要记录和恢复对象状态的情况下非常有用,比如在游戏中保存进度、在文档编辑器中撤销操作或者在复杂计算过程...

Global site tag (gtag.js) - Google Analytics