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 相关文章推荐
PHP3 safe_mode 失效漏洞
Oct 09 PHP
php基础知识:控制结构
Dec 13 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 PHP
php向js函数传参的几种方法
Aug 10 PHP
php中define用法实例
Jul 30 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
php png失真的原因及解决办法
Nov 17 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通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
常用PHP封装分页工具类
2017/01/14 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
Windows下PyMongo下载及安装教程
2015/04/27 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
Python 支持向量机分类器的实现
2020/01/15 Python
Python如何对XML 解析
2020/06/28 Python
区分python中的进程与线程
2020/08/13 Python
如何基于Python按行合并两个txt
2020/11/03 Python
Django model class Meta原理解析
2020/11/14 Python
python3中布局背景颜色代码分析
2020/12/01 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
30年同学聚会感言
2014/01/30 职场文书
亲属关系公证书样本
2015/01/23 职场文书
督导岗位职责
2015/02/04 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL