• 备忘录模式(设计模式_20)


    备忘录模式,在一个对象保存内部状态,然后在这个状态之外的对象保存整个状态,注意:要注意内存的管理;

    备忘录模式,通俗易懂的话语来讲,其实就是将整个对象保存在内存中,这样会有什么好处呢?
    例如:以前我们玩单机游戏,(打飞机游戏)刚开始玩的时候生命值是100,等打了很多很多战机之后,受过很多伤害,生命值慢慢的就变成了0,然后就输了,输了之后会有一个(重新再来一局)操作,可以恢复到初始状态,其实在打飞机游戏之前,就已经把(游戏初始值)存到备忘录对象了,
    当在(重新再来一局)操作时,只需恢复即可

    例如:电视(风云雄霸天下里面),雄霸的三分归元气已经修炼到第九层,在与(风云)最后决战中,被风云合并之后的摩诃无量打败,
    然后自废武功,自废武功的时候,把三分归元气备份到了云端,经过多年的修炼又从云端下载下来了,重新达到了初始状态,这个过程
    使用备忘录模式来完成,请看案例:

    以下举例来完成:

    package com.oop.demo2;
    
    /**
     * 此对象为雄霸对象
     * @author Liudeli
     *
     */
    public class XionBa {
    
        /**
         * 这个值就是雄霸的(三分归元气)的杀伤力值
         */
        private int lethality;
    
        public void setLethality(int lethality) {
            this.lethality = lethality;
        }
    
        public int getLethality() {
            return lethality;
        }
    
        /**
         *  保存(三分归元气)武功到云端(备忘录)
         * @return
         */
        public Cloud createCloud() {
            return new Cloud(lethality);
        }
    
        /**
         * 把武功(三分归元气)从云端下载下来,雄霸就恢复到了当年的雄风
         * @param cloud
         */
        public void setXionBa(Cloud cloud) {
            this.lethality = cloud.getLethality();
        }
    
        /**
         * 使出三分归元气最大威力
         */
        public void hit() {
            System.out.println("雄霸使出三分归元气 ----> ○○ 杀伤力:" + lethality);
        }
    
    }
    
    package com.oop.demo2;
    
    /**
     * 风云对象
     * @author Liudeli
     *
     */
    public class FengYun {
    
        /**
         * 风云合并使出最厉害的(摩诃无量)
         */
        public void hit() {
            System.out.println("风云合并,摩诃无量  ----> OO 杀伤力:"  + 89556);
        }
    
    }
    
    package com.oop.demo2;
    
    /**
     * 云端对象(备忘录)
     * @author Liudeli
     *
     */
    public class Cloud {
    
        /**
         * 用于存放雄霸的三分归元气
         */
        private int lethality;
    
        public Cloud(int lethality) {
            this.lethality = lethality;
        }
    
        public int getLethality() {
            return lethality;
        }
    
    }
    
    package com.oop.demo2;
    
    /**
     * 管理者
     * @author Liudeli
     *
     */
    public class Manager {
    
        private Cloud cloud;
    
        public Cloud getCloud() {
            return cloud;
        }
    
        public void setCloud(Cloud cloud) {
            this.cloud = cloud;
        }
    
    }
    
    /**
     * 测试程序(备忘录模式)
     * @author Liudeli
     *
     */
    public class Main {
    
        public static void main(String[] args) {
            // 风云来找雄霸,决一死战
            FengYun fengYun = new FengYun();
            fengYun.hit();
    
            // 雄霸使出(三分归元气)武功
            XionBa xionBa = new XionBa();
            xionBa.setLethality(78958);
            xionBa.hit();
            System.out.println("此战雄霸已败,雄霸逃亡中...");
    
            System.out.println("");
    
            // 雄霸为了保证性命,自废武功,把武功(三分归元气)存到云端(备忘录)
            Manager manager = new Manager();
            manager.setCloud(xionBa.createCloud());
            System.out.println("雄霸的三分归元气已废!");
    
            xionBa.setLethality(0);
            xionBa.hit();
    
            System.out.println("");
    
            // 雄霸经过多年修炼,在把存到云上面的武功(三分归元气)下载下来
            System.out.println("雄霸经过多年修炼,在把存到云上面的武功(三分归元气)下载下来");
            xionBa.setXionBa(manager.getCloud());;
            xionBa.hit();
        }
    
    }

    运行结果:
    这里写图片描述


    谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
    刘德利CSDN博客, http://blog.csdn.net/u011967006

  • 相关阅读:
    js鼠标事件/onclick/鼠标点击/光标移开
    搭建PHP环境
    SQL语法的一些整理
    DataTime格式大全啊!
    分页存储过程
    jquery中获取键盘按键
    中国历史朝代歌(完整)
    js键盘事件
    js鼠标、键盘事件实例代码
    《.NET Compact Framework移动开发指南》答疑一
  • 原文地址:https://www.cnblogs.com/android-deli/p/10322196.html
Copyright © 2020-2023  润新知