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();
    
    
        }
    }
    
    
  • 相关阅读:
    package.json中 npm依赖包版本前的符号的意义
    移动端1px的border
    react下将输入的汉字转化为拼音
    h5打开App的方法。
    图片在缩放截取后以固定尺寸上传到第三方
    图片裁切,上传,自动匹配颜色。
    ReactNative学习一
    MySQL数据库8(二)MySQL基本介绍
    MySQL数据库8(一)SQL简介

  • 原文地址:https://www.cnblogs.com/yfy-/p/12216085.html
Copyright © 2011-2022 走看看