zoukankan      html  css  js  c++  java
  • 设计模式-备忘录模式

    什么叫备忘录?两个字,回滚。备忘录模式可以记录一个对象的内部状态,当需要的时候可以将对象恢复到之前的状态

    备忘录模式有三个角色:发起者,备忘录,管理者。简而言之,发起者对对象发生改动的时候自己备份一份备忘录交给管理者。每次发起者需要恢复数据的时候找管理者,管理者找出备忘录的数据交给发起者。

    发起者只负责更改的时候备份一份然后交给管理者,发起者可以访问备忘录的所有信息。管理者对发起者创建的备忘录进行管理,只有保存和查看的权限,无法对备忘录进行修改。

    发起者

    public class Originator {
        private String state;
    
        public String getState() {
            return state;
        }
    
        public void setState(String state) {
            this.state = state;
        }
        public Memento createMemento(){
            return new Memento(state);
        }
        public void restoreMemento(Memento m){
            this.setState(m.getState());
        }
    }

    备忘录

    public class Memento {
        private String state;
    
        public Memento(String state) {
            this.state = state;
        }
    
        public String getState() {
            return state;
        }
    
        public void setState(String state) {
            this.state = state;
        }
    }

    管理者

    public class manager {
        private Memento memento;
        public void setMemento(Memento m){
            this.memento=m;
        }
        public Memento  getMemento(){
            return memento;
        }
    }

    测试类

    public class Client {
        public static void main(String[] args) {
            //发起人
            Originator or = new Originator();
            //管理者
            manager manager = new manager();
            or.setState("状态A");
            manager.setMemento(or.createMemento());
            or.setState("状态B");
            or.restoreMemento(manager.getMemento());
            System.out.println(or.getState());
        }
    }

    可以看出,管理者只是协助发起者管理备忘录的一个类,他在发起者需要恢复状态的时候获取备忘录交给请求者。简而言之,管理者就是一个替老板拿钱包的,在老板需要掏钱的时候把钱包提给老板。

    应用场景:游戏中的存档啊,事务的回滚啊,文档的撤销等等

    不和别人一样,不复制只真正理解
  • 相关阅读:
    [C#] 了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数
    [C#] C# 知识回顾
    [C#] C# 知识回顾
    [C#] C# 知识回顾
    [C#] C# 知识回顾
    [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密
    [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
    [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
    [C#] 简单的 Helper 封装 -- RandomHelper
    [C#] 简单的 Helper 封装 -- CookieHelper
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12795640.html
Copyright © 2011-2022 走看看