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

    备忘录模式提供了一种弥补真实世界缺陷的方法,让“后悔药”在程序世界中可行,其定义如下:
    Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored
    to this state later.
    在不破坏封装性的前提下,捕获一个对象的内部状态并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

    类图中的三个角色:
    1.Originator发起人角色:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据
    2.Memento备忘录角色:负责存储Originator发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。
    3.Caretaker备忘录管理员角色:对备忘录进行管理,保存和提供备忘录

    //发起人角色
    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){
            this.setState(_memento.getState());
        }
    }
    
    //备忘录角色
    public class Memento{
        private String state="";
        public Memento(String _state){
            this.state=_state;
        }
        public String getState(){
            return this.state;
        }
        
        public void setState(String state){
            this.state=state;
        }
    }
    //备忘录管理员角色
    public class Caretaker{
        private Memento memento;
        public Memento getMemento(){
            return memento;
        ]
        public void setMemento(Memento memento){
            this.memento=memento;
        }
    }
    
    //场景类
    public class Client{
        public static void main(String[] args){
            Originator originator=new Originator();
            Caretaker caretaker=new Caretaker();
            caretaker.setMemento(originator.createMemento());
            originator.restoreMemento(caretaker.getMemento());
        }
    }

    备忘录模式的使用场景
    1.需要保存和恢复数据的相关状体场景
    2.提供一个回滚的操作;比如Word中的CTRL+Z组合键
    3.需要监控的副本场景中。例如要监控一个对象的属性,但是监控又不应该作为系统的主业务来调用,它只是边缘应用,即使出现监控不
    准,错误报警也影响不大,因此一般的做法是备份一个主线程中的对象,然后又分析程序来分析
    4.数据连接的事务管理就是用的备忘录模式

  • 相关阅读:
    1105 Spiral Matrix (25分)(蛇形填数)
    1104 Sum of Number Segments (20分)(long double)
    1026 Table Tennis (30分)(模拟)
    1091 Acute Stroke (30分)(bfs,连通块个数统计)
    1095 Cars on Campus (30分)(排序)
    1098 Insertion or Heap Sort (25分)(堆排序和插入排序)
    堆以及堆排序详解
    1089 Insert or Merge (25分)
    1088 Rational Arithmetic (20分)(模拟)
    1086 Tree Traversals Again (25分)(树的重构与遍历)
  • 原文地址:https://www.cnblogs.com/liaojie970/p/5492766.html
Copyright © 2011-2022 走看看