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 相关文章推荐
实用函数2
Nov 08 PHP
php初学者写及时补给skype用户充话费的小程序
Nov 02 PHP
PHP 翻页 实例代码
Aug 07 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
标准PHP的AES加密算法类
Mar 12 PHP
为何说PHP引用是个坑,要慎用
Apr 02 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
PHP网站常见安全漏洞,及相应防范措施总结
Mar 01 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使用NumberFormatter格式化货币的方法
2015/03/21 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
Vue.js组件通信的几种姿势
2017/10/23 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
入党转预备思想汇报
2014/01/07 职场文书
《生命 生命》教学反思
2014/04/19 职场文书
2015年人事科工作总结
2015/04/28 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
基石观后感
2015/06/12 职场文书
民政局未婚证明
2015/06/15 职场文书
2019年工作总结范文
2019/05/21 职场文书
Ajax实现异步加载数据
2021/11/17 Javascript