JAVA 设计模式 备忘录模式

xiaoxiao2021-02-28  77

用途


 

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

 

结构

图-备忘录模式结构图

Memento : 负责存储 Originator 对象的内部状态,并可以防止 Originator 以外的其他对象访问 Memento。 Memento 有两个接口,Caretaker 只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。 Originator 可以看到一个宽接口,允许它访问返回到先前状态所需的所有数据。 class Memento {      private String state;      public Memento(String state) {          this.state = state;     }           public String GetState() {          return state;     } } Originator : 负责创建一个备忘录 Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。 Originator 可根据需要决定 Memento 存储 Originator 的哪些内部状态。 class Originator {      private String state;           public  void SetState(String state) {          this.state = state;     }      public String GetState() {          return state;     }           public Memento CreateMemento() {          return ( new Memento(state));     }           public  void SetMemento(Memento memento) {         state = memento.GetState();     }           public  void Show() {         System.out.println("State = " + state);     } } Caretaker : 负责保存好备忘录 Memento,不能对备忘录的内容进行操作或检查。 class Caretaker {      private Memento memento;           public  void SetMemento(Memento memento) {          this.memento = memento;     }      public Memento GetMemento() {          return memento;     } }

测试代码

public  class MementoPattern {      public  static  void main(String[] args) {         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();     } } View Code

运行结果

State = ON State = OFF State = ON View Code

推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》

《HeadFirst设计模式》

 

转载请注明原文地址: https://www.6miu.com/read-65428.html

最新回复(0)