元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • 设计模式

    • 设计模式简介
    • 设计模式之单例模式
    • 设计模式之工厂模式
    • 设计模式之原型模式
    • 设计模式之建造者模式
    • 设计模式之适配器模式
    • 设计模式之桥接模式
    • 设计模式之组合模式
    • 设计模式之装饰器模式
    • 设计模式之外观模式
    • 设计模式之享元模式
    • 设计模式之代理模式
    • 设计模式之责任链模式
    • 设计模式之命令模式
    • 设计模式之解释器模式
    • 设计模式之迭代器模式
    • 设计模式之中介者模式
    • 设计模式之备忘录模式
      • 一、简介
      • 二、实现方式
      • 三、应用场景
      • 四、思维导图
    • 设计模式之观察者模式
    • 设计模式之状态模式
    • 设计模式之策略模式
    • 设计模式之模版模式
    • 设计模式之访问者模式
    • 设计模式辨析篇
  • 高可用

  • 系统设计
  • 设计模式
元月
2022-08-19
目录

设计模式之备忘录模式

# 设计模式之备忘录模式

# 一、简介

在不破坏封装性的前提下,捕获一个对象的内部状态,并且在该对象之外保存这个状态

# 二、实现方式

  • 备忘录(Memento): 包含了要被恢复的对象的状态

    public class Memento {
        private String state;
    
        public Memento(String state){
            this.state = state;
        }
    
        public String getState(){
            return state;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  • 发起人(Originator): 创建 Memento 对象并在其中存储状态

    public class Originator {
        private String state;
    
        public void setState(String state){
            this.state = state;
        }
    
        public String getState(){
            return state;
        }
    
        public Memento saveStateToMemento(){
            return new Memento(state);
        }
    
        public void getStateFromMemento(Memento Memento){
            state = Memento.getState();
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
  • 备忘录管理员(CareTaker): 持有备忘录对象的集合,负责从 Memento 中恢复对象的状态

    public class CareTaker {
        private List<Memento> mementoList = new ArrayList<Memento>();
    
        public void add(Memento state){
            mementoList.add(state);
        }
    
        public Memento get(int index){
            return mementoList.get(index);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  • 测试DEMO

    public class MementoPatternDemo {
       public static void main(String[] args) {
          Originator originator = new Originator();
          CareTaker careTaker = new CareTaker();
          originator.setState("State #1");
          originator.setState("State #2");
          careTaker.add(originator.saveStateToMemento());
          originator.setState("State #3");
          careTaker.add(originator.saveStateToMemento());
          originator.setState("State #4");
     
          System.out.println("Current State: " + originator.getState());    
          originator.getStateFromMemento(careTaker.get(0));
          System.out.println("First saved State: " + originator.getState());
          originator.getStateFromMemento(careTaker.get(1));
          System.out.println("Second saved State: " + originator.getState());
       }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

# 三、应用场景

游戏存档等

# 四、思维导图

#设计模式
设计模式之中介者模式
设计模式之观察者模式

← 设计模式之中介者模式 设计模式之观察者模式→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式