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 相关文章推荐
PHP4在Windows2000下的安装
Oct 09 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 PHP
PHP中16个高危函数整理
Sep 19 PHP
php实现分页功能的详细实例方法
Sep 29 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
PHP数组基本用法与知识点总结
Jun 02 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
用Socket发送电子邮件
2006/10/09 PHP
PHP下escape解码函数的实现方法
2010/08/08 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
php 短链接算法收集与分析
2011/12/30 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
详解php协程知识点
2018/09/21 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
JS 建立对象的方法
2007/04/21 Javascript
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
Python File readlines() 使用方法
2018/03/19 Python
Python unittest模块用法实例分析
2018/05/25 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
开工庆典邀请函范文
2014/01/16 职场文书
给面试官的感谢信
2014/02/01 职场文书
借款担保书范文
2014/05/13 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书