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 相关文章推荐
destoon二次开发常用数据库操作
Jun 21 PHP
php字符串截取函数用法分析
Nov 25 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
php使用pdo连接sqlite3的配置示例
May 27 PHP
Laravel日志用法详解
Oct 09 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
laravel 修改记住我功能的cookie保存时间的方法
Oct 14 PHP
PHP实现rar解压读取扩展包小结
Jun 03 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
模仿OSO的论坛(五)
2006/10/09 PHP
剖析 PHP 中的输出缓冲
2006/12/21 PHP
php 模拟POST|GET操作实现代码
2010/07/20 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
AngularJS快速入门
2015/04/02 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python flask框架post接口调用示例
2019/07/03 Python
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
爱心捐款倡议书
2014/04/14 职场文书
什么是就业协议书
2014/04/17 职场文书
工程造价专业求职信
2014/07/17 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书