歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java設計模式-備忘錄模式

Java設計模式-備忘錄模式

日期:2017/3/1 9:35:12   编辑:Linux編程

意圖:在不破壞對象封裝性的前提下,在對象的外部得到並保存對象內部的狀態,這樣對象以後還能恢復到原來的狀態。像是備份對象的內部信息。

參與者:

memento(備忘錄),存儲原發器的內部狀態。

Originator(原發器),創建備忘錄,紀錄自己當前的狀態,以及使用備忘錄恢復對象的狀態。

CareTaker(負責人),負責保存好備忘錄,並且保護備忘錄不能被改變。

缺點:使用備忘錄的代價很高,如果原發器創建備忘錄時,必須拷貝並存儲大量數據,或者客戶端要頻繁的創建和恢復原發器的狀態,可能會導致很大的開銷。

Java代碼實現如下:

package com.zqwei.memento;

public class Originator {

private Memento memento;

private String name = null;

public Originator(String name) {
this.name = name;
}

public Memento createMemento() {
return new Memento(name);
}
public void restoreMemento(Memento memento) {
this.name = memento.getName();
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Memento {

private String name;

public Memento(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}


}

public class CareTaker {
private Memento memento;

public CareTaker(Memento memento) {
this.memento = memento;
}

public Memento getMemento(){
return memento;
}
}

public class Test {

public static void main(String[] args) {
Originator ori = new Originator("zhangsan");
CareTaker careTaker = new CareTaker(ori.createMemento());

System.out.println("before modify, name is "+ori.getName());
ori.setName("lisi");
System.out.println("after modify,name is "+ori.getName());
ori.restoreMemento(careTaker.getMemento());
System.out.println("after restore, name is"+ori.getName());
}
}

Copyright © Linux教程網 All Rights Reserved