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与SQL注入攻击[一]
Apr 17 PHP
中英文字符串翻转函数
Dec 09 PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
发一个php简单的伪原创程序,配合商城采集用的
Oct 12 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
PHP的password_hash()使用实例
Mar 17 PHP
php析构函数的简单使用说明
Aug 24 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 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面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
Jquery Change与bind事件代码
2011/09/29 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
python获取网页状态码示例
2014/03/30 Python
python中将字典转换成其json字符串
2014/07/16 Python
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
python对json的相关操作实例详解
2017/01/04 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
python中提高pip install速度
2020/02/14 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
见习期自我鉴定
2014/01/31 职场文书
护士自我评价
2014/02/01 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
导游词400字
2015/02/13 职场文书
保安辞职信范文
2015/02/28 职场文书
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
Hive HQL支持2种查询语句风格
2022/06/25 数据库