加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_商丘站长网 (https://www.0370zz.com/)- AI硬件、CDN、大数据、云上网络、数据采集!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php Flyweight享元模式使用实例

发布时间:2023-11-06 12:02:01 所属栏目: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。把所有共享的资源的生产全部交给个享元工厂。
 
 

(编辑:开发网_商丘站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章