设计模式(十九):享元模式

转载请注明作者和出处:https://www.jianshu.com/p/33098b73772e(https://www.jianshu.com/p/33098b73772e)

运行平台: Windows

php版本: php7.0

作者简介: 一个本该成为游戏职业选手却被编程耽误的程序员


享元模式,就是把对象放到某个地方存放着,想要的时候直接拿出来就行,存货的意思
例如我们在玩游戏,要经常弄出来很多士兵,我们不可能针对每个士兵去创造新的对象,这时候我们只需要从享元池拿出来就行,经常配合工厂模式一起使用;

角色

  • 享元工厂角色(FWFactory):创建并管理BlogModel对象。
  • 所有具体享元父接口角色(BolgModel):接受并作用与外部状态。
  • 具体享元角色(JobsBlog):具体变化点,为内部对象增加储存空间。
";
    }
}

// 具体骑士类
Class Knight extends Arsenal
{
    function Create()
    {
        echo "骑士:冲散敌军阵形
"; } } // 享元类 Class Flyweight{ // 定义享元池 private $flyweights = array(); function getObjClass($name){ if(isset($this->flyweights[$name])) { echo "*************从享元池里取出************
"; return $this->flyweights[$name]; } else{ echo "*************新建对象并存入享元池************
"; $ClassName = new $name(); $this->flyweights[$name] = $ClassName; return $this->flyweights[$name]; } } } $obj = new Flyweight(); // 第1个战士 $War1 = $obj->getObjClass("Warrior"); $War1->Create(); // 第2个战士 $War2 = $obj->getObjClass("Warrior"); $War2->Create(); // 第3个战士 $War3 = $obj->getObjClass("Warrior"); $War3->Create(); // 第1个骑兵 $kni1 = $obj->getObjClass("Knight"); $kni1->Create(); // 第2个骑兵 $kni2 = $obj->getObjClass("Knight"); $kni2->Create();

参考资料

  • [1] PHP设计模式--享元模式(https://blog.csdn.net/xhanguomzhu/article/details/79986325)》

你可能感兴趣的:(设计模式(十九):享元模式)