zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/coshaho/p/6974032.html
Copyright © 2011-2022 走看看