题记
==============================================================================
本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦!

本文地址:http://www.cnblogs.com/davidhhuan/p/4248186.html
==============================================================================

星际的战斗达到后面,地图里面的部队很多,如果我们把每个兵的图像动画和属性值作为一个对象的话,系统的内存里会消耗极大。
我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个。
虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的颜色。比如每个人族的机枪兵。
而且大多数玩家只用到常用的一些兵种,很多时候不会制造所有的兵种。

待解决的问题:把把兵种的图像动画共享。

思路:我们把每个兵种的图像动画建模作为对象,放入内存共享。一旦有某个画面用到这个兵种,只要把共享的图像动画拿出来,更改颜色就可以了。

享元(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。把所有共享的资源的生产全部交给个享元工厂。

相关文章:

1. 星际争霸之php面向对象(一)

2. 星际争霸之php面向对象(二)

3. 星际争霸之php设计模式--简单工厂模式

4. 星际争霸之php设计模式--工厂方法模式

5. 星际争霸之php设计模式--抽象工厂模式

6. 星际争霸之php设计模式--建造器模式

7. 星际争霸之php设计模式--中介者模式

8. 星际争霸之php设计模式--享元模式

9. 星际争霸之php设计模式--代理模式

10. 星际争霸之php设计模式--原型模式

11. 星际争霸之php设计模式--备忘模式

12. 星际争霸之php设计模式--模板模式

13. 星际争霸之php设计模式--正面模式

14. 星际争霸之php设计模式--状态模式

15. 星际争霸之php设计模式--策略模式

16. 星际争霸之php设计模式--组合模式

17. 星际争霸之php设计模式--职责链模式

18. 星际争霸之php设计模式--观察者模式

19. 星际争霸之php设计模式--迭代器模式

20. 星际争霸之php设计模式--适配器模式

8. 星际争霸之php设计模式--享元模式的更多相关文章

  1. 17. 星际争霸之php设计模式--职责链模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. 11. 星际争霸之php设计模式--备忘模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. 7. 星际争霸之php设计模式--中介者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  4. 6. 星际争霸之php设计模式--建造器模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  5. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  6. 4. 星际争霸之php设计模式--工厂方法模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  7. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  8. C++设计模式——享元模式

    本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.如果这篇文章对你有帮助,你可以请我喝杯咖啡. » 本文链接:http:// ...

  9. java设计模式——享元模式

    一. 定义与类型 定义:提供了减少对象数量从而改善应用所需的对象结构的方式,运用共享技术有效地支持大量细粒度的对象 类型:结构性 二. 使用场景 (1)  常常应用于系统底层的开发,以便解决系统的性能 ...

随机推荐

  1. node.js的exprots工厂模式

    工厂类: /** * Created by zzq on 2015/5/15. */ module.exports = function(){ this.getProduct = function() ...

  2. 文件操作_菜单<代码>

    info文件中的内容为: { "河北省": {"石家庄": {"无极县":"", "高邑县":&qu ...

  3. 101个LINQ示例,包含几乎全部操作

    Restriction Operators Where - Simple public void Linq1() { , , , , , , , , , }; var lowNums = from n ...

  4. 实验一补充内容 Java开发环境的熟悉-刘蔚然

    本次实验 PSP时间统计 步骤 耗时百分比 需求分析 5% 设计 10% 代码实现 67% 测试 15% 分析总结 3%

  5. ios9 之后,Xcode7不推荐使用UIAlertView,改用UIAlertController+UIAlertAction(按钮)

    /** *  ios9 之后,Xcode7不推荐使用UIAlertView,改用UIAlertController+UIAlertAction(按钮) */ UIAlertController *al ...

  6. 配置Tomcat6的管理用户

    在Tomcat上发布war之前需要配置一个管理用户以进入上传页面,而配置就是通过修改/usr/local/tomcat6/conf/tomcat-users.xml这个文件进行的.下面是修改后的文字: ...

  7. JS实现动画原理一(闭包方式)

    前提:      你必须了解js的闭包(否则你看不懂滴)     我们就来做一个js实现jq animate的动画效果来简单探索一下,js动画实现的简单原理: html代码 <div id=&q ...

  8. 11种dialogBox样式打包开源,逐一详解

    期待已久,APICloud官方总算把各种提示样式给封装了,再也不用苦逼的自己各种被虐着封装自定义样式了.这个分享我把 dialogBox 模块的 11 个样式分别实现个简单的效果,其中将 alert ...

  9. 互联网4.0时代需要商业智能BI

    当今大数据互联网时代飞速发展,德国提出了工业化4.0, 美国提出了产业互联网,而中国提出了两化深度融合战略.越来越多的企业家开始安耐不住了,开始担心自己的企业是否跟的上时代的变化,是否使用了商业智能B ...

  10. android关于The connection to adb is down, and a severe error has occured.这个问题的解决办法

    有时在打开模拟器的时候会出现The connection to adb is down, and a severe error has occured.这个问题,这个问题的解决办法有两个: 方法一:找 ...