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执行速度全攻略
Oct 09 PHP
用PHP制作静态网站的模板框架(三)
Oct 09 PHP
如何使用脚本模仿登陆过程
Nov 22 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
PHP strncasecmp字符串比较的小技巧
Jan 04 PHP
php使用GeoIP库实例
Jun 27 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
PHP最常用的正则表达式
Feb 13 PHP
PHP实现负载均衡下的session共用功能
Apr 17 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
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
PHP中图片等比缩放的实例
2013/03/24 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
javascript 精粹笔记
2010/05/09 Javascript
js对象的比较
2011/02/26 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
继续学习javascript闭包
2015/12/03 Javascript
bootstrap table小案例
2016/10/21 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
vue实现购物车列表
2020/06/30 Javascript
玩转python爬虫之正则表达式
2016/02/17 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
python中使用while循环的实例
2019/08/05 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
信访工作者先进事迹
2014/01/17 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
2015年环境监察工作总结
2015/07/23 职场文书