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 相关文章推荐
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
Jan 06 PHP
php设计模式 FlyWeight (享元模式)
Jun 26 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
php实现的zip文件内容比较类
Sep 24 PHP
PHP 读取文本文件内容并分页显示
Jan 02 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
php 数组随机取值的简单实例
May 23 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
基于PHP+mysql实现新闻发布系统的开发
Aug 06 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 #PHP
PDO实现学生管理系统
Mar 21 #PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 #PHP
YII2框架使用控制台命令的方法分析
Mar 18 #PHP
You might like
dedecms模板标签代码官方参考
2007/03/17 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
微信支付开发告警通知实例
2016/07/12 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
jQuery下的几个你可能没用过的功能
2010/08/29 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
利用Python演示数型数据结构的教程
2015/04/03 Python
简单解决Python文件中文编码问题
2015/11/22 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
Python字符串对象实现原理详解
2019/07/01 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
应届专科生个人的自我评价
2014/01/05 职场文书
高二地理教学反思
2014/01/24 职场文书
《满井游记》教学反思
2014/02/26 职场文书
教师考察材料范文
2014/06/03 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
结婚老公保证书
2015/02/26 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书