php Flyweight享元模式使用实例
发布时间:2023-11-06 12:07:07 所属栏目:PHP教程 来源:未知
导读: 我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个。
虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的
虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的
我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个。 虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的颜色。比如每个人族的机枪兵。 而且大多数玩家只用到常用的一些兵种,很多时候不会制造所有的兵种。 待解决的问题:把把兵种的图像动画共享。 思路:我们把每个兵种的图像动画建模作为对象,放入内存共享。一旦有某个画面用到这个兵种,只要把共享的图像动画拿出来,更改颜色就可以了。 享元(Flyweight)模式示例: 代码如下 1 2 //机枪兵享元 3 class MarineFlyweight 4 { 5 //绘制机枪兵的图像动画,参数为状态,比如属于哪一个玩家 6 public function drawMarine($state) 7 { 8 //绘制机枪兵 9 } 10 } 11 //享元工厂 12 class FlyweightFactory 13 { 14 //享元数组,用于存放多个享元 15 private $flyweights; 16 //获取享元的方法 17 public function getFlyweight($name) 18 { 19 if (!isset($flyweights[$name])) 20 { 21 $flyweights[$name] = new $name."Flyweight"; 22 } 23 return $flyweights[$name]; 24 } 25 } 26 //初始化享元工厂 27 $flyweightFactory = new FlyweightFactory(); 28 //当我们需要绘制一个机枪兵的时候,同时传递一个状态数组,里面包含剩余的血等等 29 $marine = $flyweightFactory->getFlyweight("Marine"); 30 $marine->drawMarine($status); 31 ?> 用途总结:享元模式可以将需要共享的资源集中起来,统一管理,防止重复消耗。 实现总结:需要一个享元工厂管理共享的资源,比如上面的FlyweightFactory。把所有共享的资源的生产全部交给个享元工厂。 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐