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的面试题集,附我的答案和分析(一)
Nov 19 PHP
Smarty结合Ajax实现无刷新留言本实例
Jan 02 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
Oct 20 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
实例分析PHP中PHPMailer发邮件
Dec 13 PHP
实例解析php的数据类型
Oct 24 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页面函数设置超时限制的方法
2014/12/01 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
php使用正则验证中文
2016/04/06 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
PHP children()函数讲解
2019/02/03 PHP
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
python处理PHP数组文本文件实例
2014/09/18 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python实现某论坛自动签到功能
2019/08/20 Python
python对文件的操作方法汇总
2020/02/28 Python
python导入库的具体方法
2020/06/18 Python
Python生成器generator原理及用法解析
2020/07/20 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
2015入党自传书范文
2015/06/26 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS