php设计模式之备忘模式分析【星际争霸游戏案例】


Posted in PHP onMarch 24, 2020

本文实例讲述了php设计模式之备忘模式。分享给大家供大家参考,具体如下:

我们在玩星际任务版或者单机与电脑对战的时候,有时候会突然要离开游戏,或者在出兵前面,需要存储一下游戏。

那么我们通过什么办法来保存目前的信息呢?而且在任何时候,可以恢复保存的游戏呢?

待解决的问题:保存游戏的一切信息,如果恢复的时候完全还原。

思路:建立一个专门保存信息的类,让他来处理这些事情,就像一本备忘录。

为了简单,我们这里用恢复一个玩家的信息来演示。

备忘(Memento)模式示例:

<?php
  //备忘类
  class Memento
  {
    //水晶矿
    public $ore;

    //气矿
    public $gas;

    //玩家所有的部队对象
    public $troop;

    //玩家所有的建筑对象
    public $building;

    //构造方法,参数为要保存的玩家的对象,这里强制参数的类型为Player类
    public function __construct(Player $player)
    {
      //保存这个玩家的水晶矿
      $this->ore = $player->ore;

      //保存这个玩家的气矿
      $this->gas = $player->gas;

      //保存这个玩家所有的部队对象
      $this->troop = $player->troop;

      //保存这个玩家所有的建筑对象
      $this->building = $player->building;
    }
  }

  //玩家的类
  class Player
  {
    //水晶矿
    public $ore;

    //气矿
    public $gas;

    //玩家所有的部队对象
    public $troop;

    //玩家所有的建筑对象
    public $building;

    //获取这个玩家的备忘对象
    public function getMemento()
    {
      return new Memento($this);
    }

    //用这个玩家的备忘对象来恢复这个玩家,这里强制参数的类型为Memento类
    public function restore(Memento $m)
    {
      //水晶矿
      $this->ore = $m->ore;

      //气矿
      $this->gas = $m->gas;

      //玩家所有的部队对象
      $this->troop = $m->troop;

      //玩家所有的建筑对象
      $this->building = $m->building;
    }
  }

  //制造一个玩家
  $p1 = new Player();

  //假设他现在采了100水晶矿
  $p1->ore = 100;

  //我们先保存游戏,然后继续玩游戏
  $m = $p1->getMemento();

  //假设他现在采了200水晶矿
  $p1->ore = 200;

  //我们现在载入原来保存的游戏
  $p1->restore($m);

  //输出水晶矿,可以看到已经变成原来保存的状态了
  echo $p1->ore;
?>

用途总结:备忘模式使得我们可以保存某一时刻为止的信息,然后在需要的时候,将需要的信息恢复,就像游戏的保存和载入归档一样。

实现总结:需要一个备忘类来保存信息,被保存的类需要实现生成备忘对象的方法,以及调用备忘对象来恢复自己状态的方法。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
十天学会php(3)
Oct 09 PHP
dedecms后台验证码总提示错误的解决方法
Mar 21 PHP
php编写一个简单的路由类
Apr 13 PHP
php URL跳转代码 减少外链
Jun 25 PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
详解php中serialize()和unserialize()函数
Jul 08 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 PHP
php中isset与empty函数的困惑与用法分析
Jul 05 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 #PHP
PHP中关于php.ini参数优化详解
Feb 28 #PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 #PHP
php 的多进程操作实践案例分析
Feb 28 #PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 #PHP
php的无刷新操作实现方法分析
Feb 28 #PHP
You might like
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
php实现每日签到功能
2018/11/29 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
jquery里的正则表达式说明
2011/08/03 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
Python求出0~100以内的所有素数
2018/01/23 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
竞聘书格式及范文
2014/03/31 职场文书
测控技术自荐信
2014/06/05 职场文书
信息员培训方案
2014/06/12 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
Python使用openpyxl批量处理数据
2021/06/23 Python