加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php Flyweight享元模式运用例子

发布时间:2022-01-20 19:57:22 所属栏目:PHP教程 来源:互联网
导读:星际的战斗达到后面,地图里面的部队很多,如果我们把每个兵的图像动画和属性值作为一个对象的话,系统的内存里会消耗极大.我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个. 虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一
  星际的战斗达到后面,地图里面的部队很多,如果我们把每个兵的图像动画和属性值作为一个对象的话,系统的内存里会消耗极大.我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个.
 
  虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的颜色,比如每个人族的机枪兵.而且大多数玩家只用到常用的一些兵种,很多时候不会制造所有的兵种.
 
  待解决的问题:把把兵种的图像动画共享.
 
  思路:我们把每个兵种的图像动画建模作为对象,放入内存共享,一旦有某个画面用到这个兵种,只要把共享的图像动画拿出来,更改颜色就可以了.
 
  享元(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);
  
  ?>
  用途总结:享元模式可以将需要共享的资源集中起来,统一管理,防止重复消耗.

(编辑:开发网_郴州站长网)

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

    热点阅读