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

    一、定义

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

    二、用处和缺点

    用处:适用于功能比较复杂,但需要维护或记录属性历史的类。可以根据保存的memento信息还原到前一个状态。

    缺点:角色状态需要存储到另一个备忘录对象中,在资源消耗上,内存消耗较大。

    三、示例代码

    /*发起人类 orginator*/
    public class GameCharacter {
    
        private double bloodVolume;
        private double blueQuantity;
        private double experience;
    
        public double getBloodVolume() {
            return bloodVolume;
        }
    
        public void setBloodVolume(double bloodVolume) {
            this.bloodVolume = bloodVolume;
        }
    
        public double getBlueQuantity() {
            return blueQuantity;
        }
    
        public void setBlueQuantity(double blueQuantity) {
            this.blueQuantity = blueQuantity;
        }
    
        public double getExperience() {
            return experience;
        }
    
        public void setExperience(double experience) {
            this.experience = experience;
        }
    
        public void hitBoos() {
            this.bloodVolume = 0;
            this.blueQuantity = 0;
            this.experience = 0;
        }
    
        public void displayState() {
            System.out.println("bloodVolume:" + String.valueOf(bloodVolume));
            System.out.println("blueQuantity:" + String.valueOf(blueQuantity));
            System.out.println("experience:" + String.valueOf(experience));
            System.out.println("----------------------");
        }
    
        public void initCharacter(double bloodVolume, double blueQuantity, double experience) {
            this.bloodVolume = bloodVolume;
            this.blueQuantity = blueQuantity;
            this.experience = experience;
        }
    
        /*恢复备份*/
        public void recovery(StateStore stateStore) {
            this.bloodVolume = stateStore.getBloodVolume();
            this.blueQuantity = stateStore.getBlueQuantity();
            this.experience = stateStore.getExperience();
    
        }
    
        /*创建备份*/
        public StateStore backups() {
    
            StateStore stateStore = new StateStore(this.bloodVolume, this.blueQuantity, this.experience);
            return stateStore;
        }
    
    }
    
    /*备忘录类*/
    public class StateStore {
    
        private double bloodVolume;
        private double blueQuantity;
        private double experience;
    
        public StateStore(double bloodVolume, double blueQuantity, double experience) {
            this.bloodVolume = bloodVolume;
            this.blueQuantity = blueQuantity;
            this.experience = experience;
        }
    
        public double getBloodVolume() {
            return bloodVolume;
        }
    
    
        public double getBlueQuantity() {
            return blueQuantity;
        }
    
        public double getExperience() {
            return experience;
        }
    
    }
    
    /*备忘录管理类*/
    public class StorageManager {
    
        StateStore stateStore;
    
        public StateStore getStateStore() {
            return stateStore;
        }
    
        public void setStateStore(StateStore stateStore) {
            this.stateStore = stateStore;
        }
    }
    
    /*客户端*/
    public class Client {
    
        public static void main(String[] args) {
    
            GameCharacter yasuo=new GameCharacter();
            yasuo.initCharacter(100,100,100);
            yasuo.displayState();
    
            /*设置好备份*/
            StateStore stateStore=yasuo.backups();
    
            StorageManager storageManager=new StorageManager();
            storageManager.setStateStore(stateStore);
    
            yasuo.hitBoos();
    
            /*回滚到备份数据*/
            yasuo.recovery(storageManager.getStateStore());
    
            yasuo.displayState();
    
    
        }
    }
    
    
  • 相关阅读:
    【光学相机】关于网络通信的方法及函数
    InvokeRequired与Invoke
    线程基本概念
    线程同步与线程异步
    AutoResetEvent和ManualResetEvent
    C#图像亮度调式与伪彩色图的处理
    Github文件高速下载方法
    JDK11以上版本没有JRE的解决方法
    mysql 随机函数生成某个范围内的整数
    mysql主键id重置
  • 原文地址:https://www.cnblogs.com/yfy-/p/12216085.html
Copyright © 2011-2022 走看看