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仿ZOL分页类代码
Oct 02 PHP
php初学者写及时补给skype用户充话费的小程序
Nov 02 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
php新浪微博登录接口用法实例
Dec 23 PHP
ecshop 2.72如何修改后台访问地址
Mar 03 PHP
php判断文件夹是否存在不存在则创建
Apr 09 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 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清除bom示例
2014/03/03 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
javascript实现下雨效果
2017/03/27 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
python如何将图片转换素描画
2020/09/08 Python
Python list和str互转的实现示例
2020/11/16 Python
酒店门卫岗位职责
2013/12/29 职场文书
计算机毕业生求职信
2014/06/10 职场文书
工程承包协议书范本
2014/09/29 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
义卖募捐活动总结
2015/05/09 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
导游词之桂林
2019/08/20 职场文书
四年级作文之植物
2019/09/20 职场文书
导游词之崇武古城
2019/10/07 职场文书
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python