php实现享元模式,php Flyweight享元模式使用例子

星际的战斗达到后面,地图里面的部队很多,如果我们把每个兵的图像动画和属性值作为一个对象的话,系统的内存里会消耗极大

我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个。

虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的颜色。比如每个人族的机枪兵。

而且大多数玩家只用到常用的一些兵种,很多时候不会制造所有的兵种。

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

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

享元(Flyweight)模式示例:

 代码如下复制代码

//机枪兵享元

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值