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();
        }
    }
  • 相关阅读:
    Seam jBPM integration
    NetBeans 时事通讯(刊号 # 34 Nov 11, 2008)
    Seam jBPM integration
    小学生新闻联播看多了,写的作文
    位运算中的异或运算 .
    按位与、或、异或等运算方法
    C++中L和_T()之区别
    ExtJS入门之一 类与继承
    结构体初始化
    Ext.chart 包的类图
  • 原文地址:https://www.cnblogs.com/coshaho/p/6974032.html
Copyright © 2011-2022 走看看