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执行linux系统命令的常用函数使用说明
Apr 27 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
Oct 31 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
浅谈json_encode用法
Mar 05 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
PHP实现百度人脸识别
May 06 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 PHP
PHP论坛实现积分系统的思路代码详解
Jun 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递归创建和删除文件夹的代码小结
2012/04/13 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
javascript 快速排序函数代码
2012/05/30 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
对于Python中线程问题的简单讲解
2015/04/03 Python
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
大学生个人事迹材料
2014/01/21 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
医药营销个人求职信
2014/04/12 职场文书
新党章的学习心得体会
2014/11/07 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
生死抉择观后感
2015/06/09 职场文书
初中数学教学随笔
2015/08/15 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL