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转换IP地址到真实地址的方法详解
Jun 09 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
PHP开发注意事项总结
Feb 04 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
php设计模式之单例模式代码
Jun 11 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
Jun 29 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 PHP
php-7.3.6 编译安装过程
Feb 11 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 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
session 的生命周期是多长
2006/10/09 PHP
输出控制类
2006/10/09 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
php远程下载类分享
2016/04/13 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
Extjs学习笔记之七 布局
2010/01/08 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
实例Python处理XML文件的方法
2015/08/31 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
解决Mac下使用python的坑
2019/08/13 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
技术入股合作协议书
2014/10/07 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android