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之数据库操作详解及乱码解决!
Jan 02 PHP
Php注入点构造代码
Jun 14 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
推荐几个开源的微信开发项目
Dec 28 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
php事务回滚简单实现方法示例
Mar 28 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
在Laravel5中正确设置文件权限的方法
May 22 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 PHP
Laravel配合jwt使用的方法实例
Oct 25 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 实用代码收集
2010/01/22 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
解决DataFrame排序sort的问题
2018/06/07 Python
Python内存读写操作示例
2018/07/18 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
python变量的存储原理详解
2019/07/10 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
材料化学应届生求职信
2013/10/09 职场文书
教育实习生的自我评价分享
2013/11/21 职场文书
副总经理工作职责
2013/11/28 职场文书
女方婚礼新郎答谢词
2014/01/11 职场文书
《值日生》教学反思
2014/02/17 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
治庸问责心得体会
2014/09/12 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
教师求职简历自我评价
2015/03/10 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
python爬虫--selenium模块
2021/03/31 Python