歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java設計模式-備忘錄模式

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

參與者:

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