zoukankan      html  css  js  c++  java
  • 设计模式之Memento模式

    备忘录模式:在不破坏封装性的前提下。捕获一个对象的内部状态,并在该对象之外保存这个状态。

    这样以后就能够将该对象恢复到原先保存的状态。
    适用场合:比較适合用于功能比較复杂。但须要维护或记录属性历史的类,或者须要保存的属性仅仅是众多属性中的一小部分时。
    这里写图片描写叙述
    首先定义一个Originator(发起人)类

    public class Originator {
    
        private String state;//须要保存的属性(能够定义多个)
    
        public void setState(String state){
            this.state=state;
        }
    
        public String getState(){
            return state;
        }
    
        //创建备忘录。将当前须要保存的信息导入并实例化一个Memento对象
        public Memento createMemento(){
            return new Memento(state);
        }
    
        //恢复备忘录
        public void setMemento(Memento memento){
            state=memento.getState();
        }
    
        public void show(){
            System.out.println("state="+state);
        }
    }

    定义一个Memento(备忘录)类

    public class Memento {
    
        private String state;
    
        //通过构造方法将相关数据导入
        public Memento(String state){
            this.state=state;
        }
    
        public String getState(){
            return state;
        }
    }

    然后定义一个Caretaker(管理者)类。封装Memento

    public class Caretaker {
    
        private Memento memento;
    
        //设置备忘录
        public void setMemento(Memento memento){
            this.memento=memento;
        }
    
        //得到备忘录
        public Memento getMemento(){
            return memento;
        }
    }

    client代码

        public static void main(String[] args) {
    
            //备忘录模式
            Originator originator=new Originator();
            originator.setState("on");//初始状态为on
            originator.show();
    
            Caretaker caretaker=new Caretaker();
            caretaker.setMemento(originator.createMemento());
    
            originator.setState("off");//状态改变为off
            originator.show();
            //恢复原来状态
            originator.setMemento(caretaker.getMemento());
            originator.show();
    }
  • 相关阅读:
    VM12+CentOS6.8安装VM tools
    PHP关联数组按某一value值排序
    命名规范
    JavaScript中的函数
    JavaScript中的for循环语句
    JavaScript中的判断和循环
    Javascript运算符的分类
    Html中的JavaScript
    【逆战】HTML5新语义化标签 (二)
    【逆战】HTML5新语义化标签 (一)
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7204535.html
Copyright © 2011-2022 走看看