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加MYSQL服务器
Oct 09 PHP
由php if 想到的些问题
Mar 22 PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 PHP
正确的PHP匹配UTF-8中文的正则表达式
May 13 PHP
PHP常用的排序和查找算法
Aug 06 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
Laravel如何友好的修改.env配置文件详解
Jun 07 PHP
PDO::rollBack讲解
Jan 29 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
Apr 23 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
PHP开发API接口签名生成及验证操作示例
May 27 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实现多条件查询实例代码
2010/07/17 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
详解Angular 4 表单快速入门
2017/06/05 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
Python合并多个装饰器小技巧
2015/04/28 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
python 实现两个线程交替执行
2020/05/02 Python
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
学生宿舍管理制度
2014/01/30 职场文书
食品安全汇报材料
2014/08/18 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
学习保证书怎么写
2015/02/26 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
护士业务学习心得体会
2016/01/25 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
Python学习之异常中的finally使用详解
2022/03/16 Python
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA