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 相关文章推荐
dede全站URL静态化改造[070414更正]
Apr 17 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
Jun 18 PHP
php中require和require_once的区别说明
Feb 27 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
php 读取输出其他文件的实现方法
Jul 26 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
Oct 15 PHP
详解PHP PDO简单教程
May 28 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编程入门的基本语法知识点总结
2016/01/26 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
nodejs批量修改文件编码格式
2015/01/22 NodeJs
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
Less 安装及基本用法
2018/05/05 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
python基于opencv检测程序运行效率
2019/12/28 Python
详解python如何引用包package
2020/06/07 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
美国手机支架公司:PopSockets
2019/11/27 全球购物
采购主管的岗位职责
2013/12/17 职场文书
电子商务专业个人的自我评价
2013/12/19 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏