8. 星际争霸之php设计模式--享元模式
题记
==============================================================================
本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。把所有共享的资源的生产全部交给个享元工厂。
相关文章:
8. 星际争霸之php设计模式--享元模式的更多相关文章
- 17. 星际争霸之php设计模式--职责链模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 11. 星际争霸之php设计模式--备忘模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 7. 星际争霸之php设计模式--中介者模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 6. 星际争霸之php设计模式--建造器模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 4. 星际争霸之php设计模式--工厂方法模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- C++设计模式——享元模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.如果这篇文章对你有帮助,你可以请我喝杯咖啡. » 本文链接:http:// ...
- java设计模式——享元模式
一. 定义与类型 定义:提供了减少对象数量从而改善应用所需的对象结构的方式,运用共享技术有效地支持大量细粒度的对象 类型:结构性 二. 使用场景 (1) 常常应用于系统底层的开发,以便解决系统的性能 ...
随机推荐
- IOS测试程序运行耗时
iOS设备相对于电脑,内存和处理能力有限,所以一段代码或者程序运行的时间需要时刻注意,这里提供两种获取精确时间的方法. 方法一:使用系统时间 NSDate* tmpStartData = [[NSDa ...
- SpringMVC接收checkbox传值
Controller方法形参接收checkbox的值,既可以用String,也可以用String[]. 字符串数组接收的测试代码如下: @Controller @RequestMapping(&quo ...
- mysql基本sql语句大全(提升用语篇)
1.说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1(仅用于SQlServer) 法二:s ...
- Using Change Management and Change Control Within a Project
In any project, change is inevitable whether it comes from within the project or from external sourc ...
- postgresql 将查询结果导出到文件
方法1:进入查询终端,输入\o aa.out 查询结果将输出到当前目录的aa.out 文件 方法2: 将查询语句写a.sql中, alias sql2="export PGPASSWORD ...
- JS位操作符
1.按位与 AND & var result = 25 & 3; alert(result); //1var result2 = 25 & -3;alert(result2); ...
- 用代码调用Storyboard里面的viewController
今天在帮助群里的一个朋友弄pop事件,在他那边,当前的viewcontroller,不能pop出去. 初步估计,他的ViewController层级多,他自己没有理清. 因为pushViewContr ...
- T450的Fn lock
新到手一台T450,有一点让我比较恼火,就是F1~F12不能直接按必须先按Fn. 使用一阵突然发现,按住Fn+Esc能锁定/解锁Fn,锁定后F1~F12就可以直接按了. 设计者想得还是比较周到的. 2 ...
- tomcat启动出现PermGen space错误
今天部署项目时,出现了jvm内存溢出的问题,显示PermGen space错误. 经过不断的努力,终于解决出来了. 步骤如下: 在eclipse中菜单栏run-->RunConfigurati ...
- [BS-17] iOS开发-Alpha,Hidden和Opaque区别
iOS开发-Alpha,Hidden和Opaque区别 UIView控件都有Alpha,Hidden和Opaque这三个常见属性,UIView控件BackgroundColor是用RGBA表示的, ...