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语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
PHP实现多进程并行操作的详解(可做守护进程)
Jun 18 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
CI框架学习笔记(二) -入口文件index.php
Oct 27 PHP
php通过exif_read_data函数获取图片的exif信息
May 21 PHP
php实现上传图片文件代码
Jul 19 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
yii2 commands模式以及配置crontab定时任务的方法
Aug 19 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 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 file_get_contents设置超时处理方法
2013/09/30 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
修复IE9&amp;safari 的sort方法
2011/10/21 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
让python json encode datetime类型
2010/12/28 Python
pyqt和pyside开发图形化界面
2014/01/22 Python
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
python 的列表遍历删除实现代码
2020/04/12 Python
深入理解python对json的操作总结
2017/01/05 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
python如何从键盘获取输入实例
2020/06/18 Python
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
手工社团活动方案
2014/02/17 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
2015年工商所工作总结
2015/05/21 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python
如何利用python实现Simhash算法
2022/06/28 Python