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&amp;mysql(五)
Oct 09 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
简单的php文件上传(实例)
Oct 27 PHP
PHP中构造函数和析构函数解析
Oct 10 PHP
smarty简单入门实例
Nov 28 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
PHP 生成微信红包代码简单
Mar 25 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
php实现PDO中捕获SQL语句错误的方法
Feb 16 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
javascript dom 基本操作小结
2010/04/11 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
Javascript的this详解
2019/03/23 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
星球大战与Python之间的那些事
2016/01/07 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
python爬虫超时的处理的实例
2018/12/19 Python
增大python字体的方法步骤
2020/07/05 Python
python3.4中清屏的处理方法
2020/07/06 Python
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
初任培训自我鉴定
2013/10/07 职场文书
管理标语大全
2014/06/24 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
消费者理赔投诉书
2015/07/02 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
600字作文之感受大自然
2019/11/27 职场文书
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python