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中iconv函数使用方法
May 24 PHP
PHP 进程锁定问题分析研究
Nov 24 PHP
php下封装较好的数字分页方法
Nov 23 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
php密码生成类实例
Sep 24 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
php自动加载方式集合
Apr 04 PHP
PHP.vs.JAVA
Apr 29 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
解决php写入数据库乱码的问题
Sep 17 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 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
PHP开发的一些注意点总结
2010/10/12 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
php输出图像的方法实例分析
2017/02/16 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
2017/04/24 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
Windows下安装python2.7及科学计算套装
2015/03/05 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
简单了解django索引的相关知识
2019/07/17 Python
python实现倒计时小工具
2019/07/29 Python
python可视化text()函数使用详解
2020/02/11 Python
Django用户身份验证完成示例代码
2020/04/03 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
应用艺术专业个人的自我评价
2014/01/03 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
面试感谢信范文
2015/01/22 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL