php设计模式之原型模式分析【星际争霸游戏案例】


Posted in PHP onMarch 23, 2020

本文实例讲述了php设计模式之原型模式。分享给大家供大家参考,具体如下:

我们一般用new来新增对象,不过很多时候新增一个对象需要一些工作。而星际里面往往会新增某些类的大量的对象,比如新增很多机枪兵和龙骑。

待解决的问题:我们能否减少new的使用,同时避免需要新增对象的时候,了解对象的类名。

思路:php5提供了克隆方法,我们可以新增一个对象,然后每次需要新增和她同类的对象,克隆他就可以了。

原型(Prototype)模式示例:

<?php
  //机枪兵类
  class Marine
  {
    //所属的用户ID
    public $playerID

    //构造函数,参数为用户的id
    public function __construct($id)
    {
      $this->playerID = $id;
    }
  }

  //兵种的管理类
  class TroopManager
  {
    //数组,用于存放多个兵种的原型
    public $troopPrototype = array();

    //增加原型,第一个参数为原型的名字,第二个参数为原型对象
    public function addPrototype($name, $prototype)
    {
      $this->troopPrototype[$name] = $prototype;
    }

    //获取原型的克隆,也就是替代new的方法,参数为原型的名字
    public function getPrototype($name)
    {
      return clone $this->troopPrototype[$name];
    }
  }

  //初始化兵种的管理类
  $manager = new TroopManager();

  //初始化两个属于不同玩家的机枪兵的原型
  $m1 = new Marine(1);
  $m2 = new Marine(2);

  //增加原型,同时用比较容易记忆的名字来命名原型
  $manager->addPrototype('Marine of 1', $m1);
  $manager->addPrototype('Marine of 2', $m2);

  //当需要新增对象的时候,我们可以不必知道对象的类名和初始化的工作
  $m3 = $manager->getPrototype('Marine of 1');
?>

用途总结:原型模式可以将新增对象的工作细节封装。

实现总结:需要一个原型管理类,实现增加和获取克隆原型的方法。注意这里由于为了简明,省略了一些东西,实际上我们可以在克隆方法上做一些改动,也可以用接口规范每个原型类。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个PHP数组应该有多大的分析
Jul 30 PHP
PHPMailer 中文使用说明小结
Jan 22 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
Jun 03 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
Oct 23 PHP
CodeIgniter使用smtp服务发送html邮件的方法
Jun 10 PHP
如何使用php实现评委评分器
Jul 31 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 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
php下的原生ajax请求用法实例分析
Feb 28 #PHP
You might like
php获取地址栏信息的代码
2008/10/08 PHP
php 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
python线程锁(thread)学习示例
2013/12/04 Python
python解析xml模块封装代码
2014/02/07 Python
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Python序列化pickle模块使用详解
2020/03/05 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
《小草和大树》教学反思
2014/02/16 职场文书
《匆匆》教学反思
2014/02/22 职场文书
出纳担保书范文
2014/04/02 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
党员年终个人总结
2015/02/14 职场文书
物业保安辞职信
2015/05/12 职场文书
辛亥革命观后感
2015/06/02 职场文书
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python