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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
PHP开发不能违背的安全规则 过滤用户输入
May 01 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
PHP内存使用情况如何获取
Oct 10 PHP
Yii中Model(模型)的创建及使用方法
Dec 28 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
PHP强制转化的形式整理
May 22 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
火车头采集器3.0采集图文教程
2007/03/17 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
读jQuery之五(取DOM元素)
2011/06/20 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
javascript常用的设计模式
2017/02/09 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
react redux入门示例
2018/04/19 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
python 实现插入排序算法
2012/06/05 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
Python阶乘求和的代码详解
2020/02/14 Python
Myholidays美国:在线旅游网站
2019/08/16 全球购物
蒂娜商店:Tiina the Store
2019/12/07 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
大学生入党推荐书范文
2014/05/17 职场文书
身边的榜样活动方案
2014/08/20 职场文书
党员年度个人总结
2015/02/14 职场文书
学习雷锋主题班会
2015/08/14 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL