设计模式-备忘录模式
设计模式-备忘录模式
月夜筱风 发表于3个月前
设计模式-备忘录模式
  • 发表于 3个月前
  • 阅读 8
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

一,定义

输入图片说明

二,代码

  1. 目录

输入图片说明

  1. 具体代码
package com.boot.lijunhao.beiwanglu;

/**
 * 为了把备忘录的内容给剥离出来单独存储在这里
 * Created by lijunhao on 2017/9/5.
 */
public class StateCaretaker {

    private StateMemento stateMemento;

    public StateCaretaker(StateMemento stateMemento) {
        this.stateMemento = stateMemento;
    }

    public StateMemento getStateMemento() {
        return stateMemento;
    }

    public void setStateMemento(StateMemento stateMemento) {
        this.stateMemento = stateMemento;
    }
}

package com.boot.lijunhao.beiwanglu;

/**
 *
 * 所要备忘的内容(少于或等于要备忘的类的属性)
 * Created by lijunhao on 2017/9/5.
 */
public class StateMemento {

    private String state;

    public StateMemento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}

package com.boot.lijunhao.beiwanglu;

import lombok.extern.slf4j.Slf4j;

/**
 * 所要备忘的类(在这里能创建备忘录,并从备忘录中恢复)
 * Created by lijunhao on 2017/9/5.
 */
@Slf4j
public class StateOriginator {

    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
        log.info("setState在类(StateOriginator.java:19)行:{}","状态为"+state);
    }

    public StateMemento createMemento(){
        //创建一个备忘录
        return new StateMemento(state);
    }

    public void recoverMemento(StateMemento stateMemento){
        //从备忘录里恢复属性值
        state=stateMemento.getState();
    }
}

package com.boot.lijunhao.beiwanglu;

import lombok.extern.slf4j.Slf4j;

/**
 *
 * 备忘录模式有几个名词:
 *      Originator :发起人
 *      Memento :备忘录
 *      Caretaker :管理者
 *
 *      在逻辑运算时,遇到:判断处理逻辑后发现不对,又要回到原状态的情况
 * Created by lijunhao on 2017/9/5.
 */
@Slf4j
public class Start {

    public static void main(String[] args) {
        StateOriginator stateOriginator = new StateOriginator();
        stateOriginator.setState("第一个状态");
        //开始创建备忘录
        StateMemento memento = stateOriginator.createMemento();
        //这个类是为了把StateMemento从StateOriginator中剥离出来(可以弄成全局变量)
        StateCaretaker stateCaretaker = new StateCaretaker(memento);
        //再次改变属性
        stateOriginator.setState("第二个状态");
        //恢复备忘录
        stateOriginator.recoverMemento(stateCaretaker.getStateMemento());
        log.info("main在类(Start.java:26)行:{}","恢复后的状态为:"+stateOriginator.getState());
    }
}

  1. 结果
14:44:21.303 [main] INFO com.boot.lijunhao.beiwanglu.StateOriginator - setState在类(StateOriginator.java:19)行:状态为第一个状态
14:44:21.303 [main] INFO com.boot.lijunhao.beiwanglu.StateOriginator - setState在类(StateOriginator.java:19)行:状态为第二个状态
14:44:21.303 [main] INFO com.boot.lijunhao.beiwanglu.Start - main在类(Start.java:26)行:恢复后的状态为:第一个状态
共有 人打赏支持
粉丝 0
博文 53
码字总数 19574
×
月夜筱风
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: