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代码
Dec 06 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
php eval函数用法总结
Oct 31 PHP
PHP+jQuery 注册模块开发详解
Oct 14 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
PHP微信支付实例解析
Jul 22 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 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合并两个数组的两种方式的异同
2012/09/14 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
javascript里的条件判断
2007/02/27 Javascript
javascript 函数速查表
2010/02/07 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
Javascript获取某个月的天数
2018/05/30 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
详解Python中的静态方法与类成员方法
2017/02/28 Python
Python+Wordpress制作小说站
2017/04/14 Python
python Opencv将图片转为字符画
2021/02/19 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
解决pip install psycopg2出错问题
2020/07/09 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
奥巴马当选演讲稿
2014/09/10 职场文书
员工辞职信范文
2015/03/02 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
Python 数据可视化之Bokeh详解
2021/11/02 Python