• Java设计模式应用——备忘录模式


    备忘录模式主要用于存档。游戏中我们打boss前总会存档,如果打boss失败,则读取存档,重新挑战boss。

    可以看出来,备忘录模式一般包括如下数据结构

    1、 存档文件:用于恢复备份场景的必要数据;

    2、 存档管理器:用于管理存档,包括存档的读写与展示;

    3、 被存档的对象。

    下面以射击游戏的存档来举例:

    1、 射击选手

    package com.coshaho.learn.memorandum;
    
    // 射击手
    public class Shooter 
    {
        // 血量
        private int blood = 100;
        
        // 子弹数量
        private int bullet = 100;
        
        // 射击
        public void shoot()
        {
            bullet = bullet - (int) (Math.random()*30);
            if(0 > bullet)
            {
                bullet = 0;
            }
            bossHurt();
        }
        
        // boss伤害
        private void bossHurt()
        {
            blood = blood - (int) (Math.random()*25);
            if(0 > blood)
            {
                blood = 0;
            }
        }
        
        public void show()
        {
            System.out.println("Shooter blood is " + blood + ", bullet is " + bullet + '.');
        }
    
        // 保存
        public Memorandum save()
        {
            return new Memorandum(blood, bullet);
        }
        
        // 载入
        public void recovery(Memorandum memory)
        {
            if(null == memory)
            {
                return;
            }
            blood = memory.getBlood();
            bullet = memory.getBullet();
        }
    }

    2、 存档文件

    package com.coshaho.learn.memorandum;
    
    // 存档
    public class Memorandum 
    {
        private int blood;
        
        private int bullet;
    
        public Memorandum(int blood, int bullet)
        {
            this.blood = blood;
            this.bullet = bullet;
        }
    
        public int getBlood() 
        {
            return blood;
        }
    
        public int getBullet() 
        {
            return bullet;
        }
    }

    3、 存档管理器

    package com.coshaho.learn.memorandum;
    
    // 存档管理器
    public class MemorandumManager 
    {
        private Memorandum memory;
    
        public Memorandum getMemory() 
        {
            return memory;
        }
    
        public void setMemory(Memorandum memory) 
        {
            this.memory = memory;
        }
    }

    4、 测试代码

    package com.coshaho.learn.memorandum;
    
    public class MemorandumTest 
    {
        public static void main(String[] args)
        {
            MemorandumManager mmemoryManager = new MemorandumManager();
            Shooter shooter = new Shooter();
            shooter.shoot();
            shooter.show();
            mmemoryManager.setMemory(shooter.save());
            
            shooter.shoot();
            shooter.show();
            shooter.recovery(mmemoryManager.getMemory());
            
            shooter.show();
        }
    }
  • 相关阅读:
    记录java设计模式中适配器模式和装饰器模式和代理模式的区别
    excel工具类记录
    docker搭建图床 chevereto 非常方便
    docker 安装mysql
    rabbitmq学习之路(八)
    理解js中的作用域,作用域链以及闭包
    浏览器解析js的顺序
    javacript 组合使用构造函数模式和原型模式
    js垃圾回收机制与深拷贝和浅拷贝
    ES6 变量的解构赋值
  • 原文地址:https://www.cnblogs.com/coshaho/p/6974032.html
Copyright © 2020-2023  润新知