php设计模式之享元模式分析【星际争霸游戏案例】


Posted in PHP onMarch 23, 2020

本文实例讲述了php设计模式之享元模式。分享给大家供大家参考,具体如下:

星际的战斗达到后面,地图里面的部队很多,如果我们把每个兵的图像动画和属性值作为一个对象的话,系统的内存里会消耗极大。

我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个。
虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的颜色。比如每个人族的机枪兵。

而且大多数玩家只用到常用的一些兵种,很多时候不会制造所有的兵种。

待解决的问题:把把兵种的图像动画共享。

思路:我们把每个兵种的图像动画建模作为对象,放入内存共享。一旦有某个画面用到这个兵种,只要把共享的图像动画拿出来,更改颜色就可以了。

享元(Flyweight)模式示例:

<?php
 //机枪兵享元
 class MarineFlyweight
 {
  //绘制机枪兵的图像动画,参数为状态,比如属于哪一个玩家
  public function drawMarine($state)
  {
   //绘制机枪兵
  }
 }

 //享元工厂
 class FlyweightFactory
 {
  //享元数组,用于存放多个享元
  private $flyweights;

  //获取享元的方法
  public function getFlyweight($name)
  {
   if (!isset($flyweights[$name]))
   {
    $flyweights[$name] = new $name."Flyweight";
   }
   return $flyweights[$name];
  }
 }

 //初始化享元工厂
 $flyweightFactory = new FlyweightFactory();

 //当我们需要绘制一个机枪兵的时候,同时传递一个状态数组,里面包含剩余的血等等
 $marine = $flyweightFactory->getFlyweight("Marine");
 $marine->drawMarine($status);
?>

用途总结:享元模式可以将需要共享的资源集中起来,统一管理,防止重复消耗。

实现总结:需要一个享元工厂管理共享的资源,比如上面的FlyweightFactory。把所有共享的资源的生产全部交给个享元工厂。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP的中问验证码
Nov 25 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
PHP文章按日期(月日)SQL归档语句
Nov 29 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
php中explode函数用法分析
Nov 15 PHP
PHP实现合并discuz用户
Aug 05 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
浅谈PHP中类和对象的相关函数
Apr 26 PHP
thinkPHP实现基于ajax的评论回复功能
Jun 22 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 #PHP
PDO实现学生管理系统
Mar 21 #PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 #PHP
YII2框架使用控制台命令的方法分析
Mar 18 #PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 #PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 #PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 #PHP
You might like
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP print类函数使用总结
2010/06/25 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
php实现简单爬虫的开发
2016/03/28 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
JointJS流程图的绘制方法
2018/12/03 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
python字符串替换示例
2014/04/24 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
python 拼接文件路径的方法
2018/10/23 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
Python读取表格类型文件代码实例
2020/02/17 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
土木工程专业自荐信
2013/10/04 职场文书
医院护士专业个人的求职信
2013/12/09 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
设计专业自荐信
2014/06/19 职场文书
简历自我评价模板
2015/03/11 职场文书
卫生主题班会
2015/08/14 职场文书
《西门豹》教学反思
2016/02/23 职场文书
用Python写一个简易版弹球游戏
2021/04/13 Python
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS