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

    备忘录模式

    在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先的状态。

    Originator

    package com.hml.memo;
    
    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 setMemento(Memento m) {
            this.state = m.getState();
        }
        
        public void show() {
            System.out.println("state: " + state);
        }
        
    }

    Memento

    package com.hml.memo;
    
    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;
        }
    
    }

    Caretaker

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

    Test

    package com.hml.memo;
    
    public class Test {
        public static void main(String[] args) {
            Originator originator = new Originator();
            originator.setState("on");
            originator.show();
    
            Caretaker c = new Caretaker();
            c.setMemento(originator.createMemento());
    
            originator.setState("off");
            originator.show();
    
            originator.setMemento(c.getMemento());
    
        }
    }

    类图

    备忘录(Memento)模式比较适用于功能比较复杂的,但是要维护或者记录属性历史的类,或者需要保存的属性是众多属性的一小部分时,Originator可以根据保存的Memento信息还原到以前的状态。如果在某个系统中使用命令模式时,需要实现命令的撤销功能,那么命令模式可以使用备忘录模式来存储撤销操作的状态。

  • 相关阅读:
    mysql相关
    java注解@Valid@Validated表单验证
    驼峰参数、下划线["_"]参数,属性互传
    redis,windows设置记录
    Java入门第一季学习总结
    计算属性calc()的运算规则
    swiper实现翻页,页面高度超出可滚动
    git常用命令
    Linux下svn常用命令
    图片高度不够一页,如何覆盖全屏
  • 原文地址:https://www.cnblogs.com/heml/p/4643864.html
Copyright © 2011-2022 走看看