• 设计模式之备忘录模式


    一、概念

    • 官方:备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
      个人理解:备忘录模式就是记录对象的状态,记录对象的属性。

    二、场景

    • Git项目管理工具
    • 数据库事务源码
    • 浏览器[前进,后退]

    三、实现

    • 条件
      • java
    • 场景
      • 以简单的项目管理为场景实现备忘录模式。
    • 代码实现
      • 解决方案类,类名:Solution
            package com.MemorandumPattern; 
            public class Solution {
                //类数量
                public int ClassCount;
                //代码大小
                public int CodeSize;
                //项目数量
                public int ProductCount;
                //保存当前对象状态
                public Memorandum SaveStateToMemorandum()
                {
                    return new Memorandum(ClassCount,CodeSize,ProductCount);
                }
                //恢复状态
                public  void  RecoveryStateToMemorandum(Memorandum memorandum)
                {
                    ClassCount = memorandum.ClassCount;
                    CodeSize = memorandum.CodeSize;
                    ProductCount = memorandum.ProductCount;
                }
            } 
        
      • 备忘录类,类名:Memorandum
            package com.MemorandumPattern; 
            public class Memorandum {
                //构造函数
                public Memorandum(int classCount,int codeSize,int productCount)
                {
                    ClassCount = classCount;
                    CodeSize = codeSize;
                    ProductCount = productCount;
                }
                //类数量
                public int ClassCount;
                //代码大小
                public int CodeSize;
                //项目数量
                public int ProductCount;
            } 
        
      • Git管理类,类名:Git
            package com.MemorandumPattern;
            
            import java.util.ArrayList;
            import java.util.List; 
            public class Git {
                private List list = new ArrayList<>();
                public void Add(Memorandum memorandum)
                {
                    list.add(memorandum);
                }
                public Memorandum GetMemorandum(int  index)
                {
                    return list.get(index);
                }
            }
        
        
      • 入口函数类
            Git git = new Git(); 
            Solution solution = new Solution();
            solution.ClassCount =100;
            solution.CodeSize=120;
            solution.ProductCount =1 ;
            //记录当前对象的状态数据
            git.Add(solution.SaveStateToMemorandum()) ;
            Memorandum memorandum =git.GetMemorandum(0);
        
            solution.ClassCount =1000;
            solution.CodeSize=1200;
            solution.ProductCount =10 ;
            Memorandum memorandum1 =  solution.SaveStateToMemorandum();
             System.out.println("-------旧对象数据:"+memorandum.ClassCount+"---"+memorandum.CodeSize+"-----"+memorandum.ProductCount);
             System.out.println("-------新对象数据:"+memorandum1.ClassCount+"---"+memorandum1.CodeSize+"-----"+memorandum1.ProductCount);
             //恢复状态
             solution.RecoveryStateToMemorandum(memorandum);
             System.out.println("-------恢复状态:"+solution.ClassCount+"---"+solution.CodeSize+"-----"+solution.ProductCount);
        
        

    四、优缺点

    • 优点
      • 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
      • 实现了信息的封装,使得用户不需要关心状态的保存细节。
    • 缺点
      • 消耗资源大,集合需要保存大量的备忘录对象,占用内存大。
  • 相关阅读:
    【无标题】
    HyperLynx(七)微带线串扰的仿真
    算法笔记-第十章-图的遍历(未处理完-11.22日)
    请问为什麽我无法用DataReader 抓到数据?
    【python笔记】第七节 散列类型与格式化输出
    【HFSS学习记录2】腔体滤波器的设计与仿真
    算法刷题-栈与队列
    7天狂揽 1.3w star 的 MetaGPT,他们的目标让软件公司为之一惊
    记录--IR_cut切换模块流程
    为什么不建议使用自定义Object作为HashMap的key?
  • 原文地址:https://blog.csdn.net/Fu_Shi_rong/article/details/127112227