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中利用XML技术构造远程服务(下)
Oct 09 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
php生成txt文件标题及内容的方法
Jan 16 PHP
php递归使用示例(php递归函数)
Feb 14 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
Smarty使用自定义资源的方法
Aug 08 PHP
标准版Eclipse搭建PHP环境的详细步骤
Nov 18 PHP
如何通过PHP实现Des加密算法代码实例
May 09 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
PHP安全性漫谈
2012/06/28 PHP
php中cookie的使用方法
2014/03/29 PHP
PHP7 标准库修改
2021/03/09 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
js实现随机点名
2021/01/19 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
最小二乘法及其python实现详解
2020/02/24 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
如何清空python的变量
2020/07/05 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
高三毕业生自我鉴定
2013/12/20 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
暑期培训心得体会
2014/09/02 职场文书
超市开店计划书
2014/09/15 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
MySQL创建管理子分区
2022/04/13 MySQL
WinServer2012搭建DNS服务器的方法步骤
2022/06/10 Servers