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 相关文章推荐
杏林同学录(四)
Oct 09 PHP
使PHP自定义函数返回多个值
Nov 26 PHP
PHP基础学习小结
Apr 17 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
php调整服务器时间的方法
Apr 03 PHP
php简单图像创建入门实例
Jun 10 PHP
php+mysql实现无限级分类
Nov 11 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
zend框架实现支持sql server的操作方法
Dec 08 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 PHP
laravel 5.5 关闭token的3种实现方式
Oct 24 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中的日期及时间
2006/11/23 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
JavaScript 对象模型 执行模型
2010/10/15 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
Vue实现购物车场景下的应用
2017/11/27 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
全面理解Python中self的用法
2016/06/04 Python
Python编程实现正则删除命令功能
2017/08/30 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
python事件驱动event实现详解
2018/11/21 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
python开头的coding设置方法
2019/08/08 Python
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
软件测试英文面试题
2012/10/14 面试题
行政专员岗位职责
2014/01/02 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
教书育人演讲稿
2014/09/11 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
大学生见习报告范文
2014/11/03 职场文书
学习普通话的体会
2014/11/07 职场文书
情人节活动总结范文
2015/02/05 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
python pygame入门教程
2021/06/01 Python
java开发双人五子棋游戏
2022/05/06 Java/Android