美文网首页
Android设计模式-备忘录模式

Android设计模式-备忘录模式

作者: 星宇V | 来源:发表于2019-11-04 16:28 被阅读0次

    UML关系简单介绍
    UML简单使用的介绍
    创建型设计模式
    Android设计模式-单例模式
    Android设计模式-工厂模式
    Android设计模式-抽象工厂模式
    Android设计模式-建造者模式
    Android设计模式-原型模式
    结构型设计模式
    Android设计模式-代理模式
    Android设计模式-装饰模式
    Android设计模式-适配器模式
    Android设计模式-组合模式
    Android设计模式-门面模式
    Android设计模式-桥接模式
    Android设计模式-享元模式
    行为型设计模式
    Android设计模式-策略模式
    Android设计模式-命令模式
    Android设计模式-责任链模式
    Android设计模式-模版方法模式
    Android设计模式-迭代器模式
    Android设计模式-观察者模式
    Android设计模式-备忘录模式
    Android设计模式-中介者模式
    Android设计模式-访问者模式
    Android设计模式-状态模式
    Android设计模式-解释器模式

    1.定义

    在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
    通俗来讲,备忘录模式就是一个对象的备份模式,提供一种程序数据的备份方法。

    2.备忘录模式UML图

    备忘录模式UML图

    角色介绍

    • Originator 发起人角色,记录当前时刻的内部状态,负责创建和恢复备忘录记录的数据。
    • Memento 备忘录角色,负责储存发起人角色的内部角色,在需要的时候提供发起人需要的内部状态
    • Caretaker 备忘录管理员角色,对备忘录进行管理的角色。

    3.简单实现

    3.1发起人角色

    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(this.state);
        }
    
        public void restoreMemento(Memento memento){
            setState(memento.getState());
        }
    }
    

    3.2 备忘录角色

    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;
        }
    }
    
    

    3.3备忘录管理者

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

    3.4客户端调用

    public class MyClass {
        public static void main(String args[]) {
            Originator originator=new Originator();
            originator.setState("111");
            /**
             * 保存当前状态
             */
            Memento memento=originator.createMemento();
            Caretaker caretaker=new Caretaker();
            caretaker.setMemento(memento);
    
            /**
             * 修改状态
             */
            originator.setState("222");
            System.out.println("发起人的当前状态为"+originator.getState());
    
            /**
             * 恢复之前保存的状态
             */
            originator.restoreMemento(caretaker.getMemento());
            System.out.println("发起人的当前状态为"+originator.getState());
    
        }
    }
    
    
    打印结果为
    
    发起人的当前状态为222
    发起人的当前状态为111
    

    这只是个最简单的例子,有时使用的时候还是有很多扩展的,比如多状态呀,结合原型模式呀,多备份的备忘录等。

    4.总结

    优点

    • 可以进行数据的存储进行回滚操作

    使用场景

    • 需要保存和恢复数据的相关状态场景。
    • 需要监控的副本场景中。

    注意事项

    • 备忘录的生命周期
    • 备忘录的性能,不要再频繁建立备份的场景中使用,需要考虑性能问题。

    相关文章

      网友评论

          本文标题:Android设计模式-备忘录模式

          本文链接:https://www.haomeiwen.com/subject/yxarbctx.html