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 相关文章推荐
3种平台下安装php4经验点滴
Oct 09 PHP
用PHP连接Oracle for NT 远程数据库
Oct 09 PHP
php读取xml实例代码
Jan 28 PHP
php str_pad() 将字符串填充成指定长度的字符串
Feb 23 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
PHP临时文件的安全性分析
Jul 04 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
Php-Redis安装测试笔记
Mar 05 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
Feb 03 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/08/01 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
JavaScript匿名函数用法分析
2015/02/13 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
javaScript基础详解
2017/01/19 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python微信公众号开发平台
2018/01/25 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
详解python配置虚拟环境
2019/04/08 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
访谈节目策划方案
2014/05/15 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
幸福终点站观后感
2015/06/04 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技