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发电子邮件
Oct 09 PHP
php类
Nov 27 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
php常用ODBC函数集(详细)
Jun 24 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
php利用事务处理转账问题
Apr 22 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 PHP
浅析PHP开发规范
Feb 05 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 PHP
php中用unset销毁变量并释放内存
May 10 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&amp;mysql(四)
2006/10/09 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
php简单的会话类代码
2011/08/08 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
jquery cookie插件代码类
2009/05/26 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
Python笔记之观察者模式
2019/11/20 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
人力资源作业细则
2014/03/03 职场文书
文明社区申报材料
2014/08/21 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL