1. 程式人生 > >java設計模式——備忘錄模式

java設計模式——備忘錄模式

       備忘錄模式:又叫做快照模式,指在不破壞封裝性的前提下,獲取到一個物件的內部狀態,並在物件之外記錄或儲存這個狀態。在有需要的時候可將該物件恢復到原先儲存的狀態。我們相當於把物件原始狀備份保留,所以叫備忘錄模式。
模式 角色物件組成:
1.發起者物件:負責建立一個備忘錄來記錄當前物件的內部狀態,並可使用備忘錄恢復內部狀態。
2.備忘錄物件:負責儲存發起者物件的內部狀態,並防止其他物件訪問備忘錄。
3.管理者物件:負責備忘錄許可權管理,不能對備忘錄物件的內容進行訪問或者操作。

    優點:
    1、備忘錄模式可以把發起人內部資訊物件遮蔽起來,從而可以保持封裝的邊界。
    2、簡化了發起人類。當發起人角色的狀態改變的時候,有可能這個狀態無效,這時候就可以使用暫時儲存起來的備忘錄將狀態復原。
    缺點:
    1、如果狀態需要完整地儲存到備忘錄物件中,那麼在資源消耗上面備忘錄物件比較昂貴。
    2、當發起者物件的狀態改變的時候,有可能這個協議無效。如果狀態改變的成功率達不到要求,可以考慮採取“假如”協議模式。

備忘錄在jsp+javabean的使用:
在一系統中新增帳戶時,在表單中需要填寫使用者名稱、密碼、聯絡電話、地址等資訊,如果有些欄位沒有填寫或填寫錯誤,當用戶點選“提交”按鈕時,需要在新增頁面上儲存使用者輸入的選項,並提示出錯的選項。這就是利用JavaBean的scope="request"或scope="session"特性實現的,即是用備忘錄模式實現的。

package com.lzh;



public class Person {
	private String name;
	private String sex;
	private int    age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public Person(String name, String sex, int age) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	public Person() {
		
		// TODO Auto-generated constructor stub
	}
	public void display() {
		// TODO Auto-generated method stub
		System.out.println(" name "+name+" sex "+sex+" age "+age);
	}
	  //建立一個備份
    public Memento createMemento(){  
        return new Memento(name, sex, age);  
    }  
      //恢復一個備份
    public void restoreMemento(Memento memento) {
		// TODO Auto-generated method stub
    	this.name=memento.getName();
    	this.sex = memento.getSex();
    	this.age = memento.getAge();
	}
}
package com.lzh;

public class Memento {
	private String name;
	private String sex;
	private int    age;
	public Memento(String name, String sex, int age) {
		
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	
	public Memento() {
		super();
		// TODO Auto-generated constructor stub
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}
package com.lzh;

public class Caretaker {
	private Memento memento;

	public Memento getMemento() {
		return memento;
	}

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

public class Mainclass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person person = new Person("zhangsan","nan",20);
		
		//Memento memento = person.createMemento();
		Caretaker caretaker = new Caretaker();
		caretaker.setMemento(person.createMemento());
		
		person.display();
		
		person.setName("lisi");
		person.setSex("nv");
		person.setAge(23);
		
		person.display();
		
		person.restoreMemento(caretaker.getMemento());
		person.display();
		
	}

}

(i)Memento:備忘錄角色,  主要負責的工作如下:
將發起人物件的內部狀態儲存起來;
可以保護其內容不被髮起人(Originator)物件之外的任何物件所讀取。
(ii)Originator:發起人角色,主要完成如下工作:
建立一個含有當前的內部狀態的備忘錄物件;
使用備忘錄物件儲存其內部狀態。
(iii)Caretaker:負責人角色,完成工作如下:
負責儲存備忘錄物件;
不儲存備忘錄物件的內容。

相關推薦

重走Java設計模式——備忘錄模式(Memento Pattern)

備忘錄模式 定義 在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。 模式結構 發起者角色(Originator):負責建立一個備忘錄用以記錄當前時刻它的內部狀態,並可以

java設計模式---備忘錄模式

備忘錄模式 概述:在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態.這樣可以將物件恢復到原先儲存的狀態. 幫助理解:備忘錄模式就是為物件提供一個備份的地方,當物件想要回滾到前一個狀態時,呼叫備忘錄物件直接就可以恢復. 備忘錄模式說包含的角

java設計模式——備忘錄模式

       備忘錄模式:又叫做快照模式,指在不破壞封裝性的前提下,獲取到一個物件的內部狀態,並在物件之外記錄或儲存這個狀態。在有需要的時候可將該物件恢復到原先儲存的狀態。我們相當於把物件原始狀備份保留,所以叫備忘錄模式。 模式 角色物件組成: 1.發起者物件:負責建立一個備

Java設計模式----備忘錄模式

tro 過程 根據 訪問 hashmap 捕獲 tom take demo 電子遊戲過去都會有一個“記錄”或者“存盤”的功能,就是當玩家在遊戲過程中將當前的遊戲狀態記錄下來,以便於之後重新登錄遊戲後讀取到記錄時的狀態。這種將對

設計模式-備忘錄模式實現悔棋操作

exc turn color new label isp lis args set 利用設計模式中的備忘錄模式實現多步悔棋的操作 1 import java.util.*; 2 class Chessman { 3 private String lab

我的設計模式:備忘錄模式

內置 public 設置 多重 解決 緩存 接口設計 怎麽辦 發起人 我的設計模式-備忘錄模式恢復到最初的狀態-->對原始狀態的保留和恢復聯想到的業務:cms稿件放入到回收站,永久記錄狀態得用到數據庫啊,怎麽辦?備忘錄模式的內存緩存不適用?類的單一職責boy職責:狀態

設計模式-備忘錄模式

設計模式 備忘錄模式 class Memento { private int age; public int Age { get { return age;

PHP設計模式 - 備忘錄模式

分享圖片 ctrl php create 封裝性 職責 clip 進行 角色 備忘錄模式又叫做快照模式(Snapshot)或 Token 模式,備忘錄模式的用意是在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態,這樣就可以在合適的時候將該對象恢復到

Java 設計---Proxy 代理模式

何謂代理模式        代理模式是指客戶端不直接呼叫服務物件,而是通過代理服務去呼叫物件。 應用場景          1.當需要為一個物件在不同的地址空間提供區域性的代表時;此時的代理模式

設計模式 --- 備忘錄模式

1.定義 在不破壞封閉的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將物件恢復到原先儲存的狀態。   2.使用場景 1)需要儲存一個物件在某一個時刻的狀態或部分狀態 2)如果用一個介面來讓其他物件得到這些狀態,將會暴露物件的實現細節並破壞物件

設計模式--備忘錄模式

定義:要保證被儲存的物件不能被物件從外部訪問,目的是保護好被儲存的這些物件的狀態的完整性以及內部實現不向外面暴露。 使用場景: ①需要儲存一個物件在某個時刻的狀態或部分狀態。 ②一個物件不希望外界直接訪問內部狀態,通過中間物件可以直接訪問其內部狀態。//這一點和

設計模式 | 備忘錄模式及典型應用

本文的主要內容: 介紹備忘錄模式 示例 備忘錄模式總結 備忘錄模式 備忘錄模式經常可以遇到,譬如下面這些場景: 瀏覽器回退:瀏覽器一般有瀏覽記錄,當我們在一個網頁上點選幾次連結之後,可在左上角點

移動開發之設計模式- 備忘錄模式(IOS&Android)

資源 完全參照備忘錄模式|菜鳥模式但不包括IOS程式碼 備忘錄模式 備忘錄模式(Memento Pattern)儲存一個物件的某個狀態,以便在適當的時候恢復物件。備忘錄模式屬於行為型模式。 介紹 意圖: 在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這

設計模式---備忘錄模式

定義 備忘錄模式:在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。 備忘錄模式通常有一下幾種角色: ● Originator發起人角色 記錄當前時刻的內部狀態,負責定義哪些屬於備份範圍的狀態,負責

JAVA中的備忘錄模式例項教程

原文連結  作者:Pankaj Kumar 譯者:f0tlo <[email protected]> 備忘錄模式是一種行為模式。備忘錄模式用於儲存物件當前狀態,並且在之後可以再次使用此狀態。備忘錄模式實現的方式需要保證,被儲存的物件狀態不能被物件從外部訪問,目的為了被儲存

21-Python與設計模式--備忘錄模式

一、遊戲進度儲存 打過遊戲的朋友一定知道,大多數遊戲都有儲存進度的功能,如果一局遊戲下來,忘儲存了進度,那麼下次只能從上次進度點開始重新打了。一般情況下,儲存進度是要存在可持久化儲存器上,本例中先以儲存在記憶體中來模擬實現該場景的情形。以模擬一個戰鬥角色為例。首先,建立遊戲角色。 c

設計模式------備忘錄模式(Memento pattern)

一、引子   俗話說:世上難買後悔藥。所以凡事講究個“三思而後行”,但總常見有人做“痛心疾首”狀:當初我要是……。如果真的有《大話西遊》中能時光倒流的“月光寶盒”,那這世上也許會少一些傷感與後悔——當然這隻能是痴人說夢了。   但是在我們手指下的程式世界裡,卻有的後悔藥買。今天我們要講的備忘錄模式便是程式世

java 行為模式 備忘錄模式

意圖 在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態 適用性 必須儲存一個物件在某一個時刻的(部分)狀態, 這樣以後需要時它才能恢復到先前的狀態。 備忘錄模式的構成 1 備忘錄(Memento

設計模式----備忘錄模式

演示 註入 color hack show 作用 現實 內容 set方法 前面說的設計模式幾乎都有用到繼承、接口,今天,我要說的這個設計模式,它就沒有用到任何接口,也不需要抽象類,更沒有復雜的繼承關系,它就是備忘錄模式,何為備忘錄,按照現實世界的理解,備忘錄就

簡說設計模式——備忘錄模式

一、什麼是備忘錄模式   備忘錄這個詞彙大家應該都不陌生,我就經常使用備忘錄來記錄一些比較重要的或者容易遺忘的資訊,與之相關的最常見的應用有許多,比如遊戲存檔,我們玩遊戲的時候肯定有存檔功能,旨在下一次登入遊戲時可以從上次退出的地方繼續遊戲,或者對復活點進行存檔,如果掛掉了則可以讀取復活點的存檔資訊重新開始