设计模式之备忘录模式

作者 : admin 本文共1297个字,预计阅读时间需要4分钟 发布时间: 2024-06-10 共3人阅读

文章目录

  • 定义
  • 示例代码

定义

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

  1. Originator(发起人):创建一个含有当前状态的备忘录对象,也可以使用备忘录对象恢复内部状态。
  2. Memento(备忘录):存储发起人的状态信息,但对外部屏蔽了发起人状态的细节,防止外部对象对状态进行非法访问。
  3. Caretaker(管理者):负责保存备忘录对象,不关心备忘录的内容,只负责存储和提供备忘录。

示例代码

  1. 创建备忘录类

    public class Memento {
        private final String state;
    
        Memento(String state) {
            this.state = state;
        }
    
        String getState() {
            return state;
        }
    }
    
  2. 管理者

    public class Caretaker {
        private List<Memento> mementoList = new ArrayList<>();
    
        public void addMemento(Memento memento) {
            mementoList.add(memento);
        }
    
        public Memento getMemento(int index) {
            return mementoList.get(index);
        }
    }
    
  3. 备忘录类

    public class Originator {
        private String state;
    
        public void setState(String state) {
            this.state = state;
            System.out.println("State set to: " + state);
        }
    
        public String getState() {
            return state;
        }
    
        public Memento saveStateToMemento() {
            return new Memento(state);
        }
    
        public void getStateFromMemento(Memento memento) {
            state = memento.getState();
            System.out.println("恢复状态:" + state);
        }
    }
    
  4. 测试类

    public class MementoTest {
        @Test
        public void test() {
            // 定义出发起人
            Originator originator = new Originator();
            originator.setState("初始状态");
            // 定义出备忘录管理员
            Caretaker caretaker = new Caretaker();
            // 创建一个备忘录
            caretaker.addMemento(originator.saveStateToMemento());
            originator.setState("制作中");
            // 恢复一个备忘录
            originator.getStateFromMemento(caretaker.getMemento(0));
        }
    }
    

    运行结果

    State set to: 初始状态
    State set to: 制作中
    恢复状态:初始状态
    
本站无任何商业行为
个人在线分享 » 设计模式之备忘录模式
E-->