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手册及PHP编程标准
Dec 17 PHP
非常不错的MySQL优化的8条经验
Mar 24 PHP
Windows PHP5和Apache的安装与配置
Jun 08 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
PHP购物车类Cart.class.php定义与用法示例
Jul 20 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
如何用PHP websocket实现网页实时聊天
May 26 PHP
详解Laravel服务容器的优势
May 29 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 #PHP
PDO实现学生管理系统
Mar 21 #PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 #PHP
YII2框架使用控制台命令的方法分析
Mar 18 #PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 #PHP
You might like
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
PHP读取XML值的代码(推荐)
2011/01/01 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
js实现简单的打印表格
2020/01/15 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
Python中顺序表的实现简单代码分享
2018/01/09 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
python文本数据处理学习笔记详解
2019/06/17 Python
python 默认参数相关知识详解
2019/09/18 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
保安自我鉴定范文
2013/12/08 职场文书
法定授权委托证明书
2015/06/18 职场文书
狂人日记读书笔记
2015/06/30 职场文书
导游词之安徽巢湖
2019/12/26 职场文书