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 similar_text 字符串的相似性比较函数
May 26 PHP
php url地址栏传中文乱码解决方法集合
Jun 25 PHP
php语言流程控制中的主动与被动
Nov 05 PHP
php如何调用webservice应用介绍
Nov 24 PHP
windows下配置php5.5开发环境及开发扩展
Dec 25 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
ThinkPHP连接Oracle数据库
Apr 22 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
Laravel5.5 动态切换多语言的操作方式
Oct 25 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 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使用base64加密解密图片示例分享
2014/01/20 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
php7下的filesize函数
2019/09/30 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
Python将多份excel表格整理成一份表格
2018/01/03 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
Python文件操作方法详解
2020/02/09 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
Linux的文件类型
2016/07/05 面试题
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
高中教师评语大全
2014/04/25 职场文书
伊索寓言教学反思
2014/05/01 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
项目工作说明书
2014/07/29 职场文书
门球健将观后感
2015/06/16 职场文书
Spring中bean集合注入的方法详解
2022/07/07 Java/Android