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留言本实例代码
May 09 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
php ajax 静态分页过程形式
Sep 02 PHP
php设置编码格式的方法
Mar 05 PHP
php中url函数介绍及使用示例
Feb 13 PHP
php中实现精确设置session过期时间的方法
Jul 17 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
php插入mysql数据返回id的方法
May 31 PHP
Laravel如何自定义command命令浅析
Mar 23 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 PHP
php字符串函数 str类常见用法示例
May 15 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
PHP 写文本日志实现代码
2010/05/18 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
2015/12/10 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
2017/02/04 PHP
laravel自定义分页效果
2017/07/23 PHP
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
浅谈javascript的调试
2015/01/28 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
python实现提取百度搜索结果的方法
2015/05/19 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
使用Python写一个小游戏
2018/04/02 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
校园报刊亭的创业计划书
2014/01/02 职场文书
工商治理实习生的自我评价
2014/01/15 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
会计学习心得体会
2014/09/09 职场文书
介绍信的格式
2015/01/30 职场文书
大四学生个人总结
2015/02/15 职场文书
辩论赛新闻稿
2015/07/17 职场文书
《小小的船》教学反思
2016/02/18 职场文书