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
php5 mysql分页实例代码
Apr 10 PHP
php单件模式结合命令链模式使用说明
Sep 07 PHP
PHP 单引号与双引号的区别
Nov 24 PHP
php 文件上传代码(限制jpg文件)
Jan 05 PHP
PHP 动态随机生成验证码类代码
Apr 09 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
php面向对象中static静态属性和静态方法的调用
Feb 08 PHP
详解PHP数组赋值方法
Nov 07 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
Laravel框架中自定义模板指令总结
Dec 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
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
vue 表单之通过v-model绑定单选按钮radio
2019/05/13 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
python3调用R的示例代码
2018/02/23 Python
python实现键盘控制鼠标移动
2020/11/27 Python
Python常见数据类型转换操作示例
2019/05/08 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
中层干部岗位职责
2013/12/18 职场文书
最新茶叶店创业计划书
2014/01/14 职场文书
购房协议书范本
2014/04/11 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
Django程序的优化技巧
2021/04/29 Python
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏