美文网首页
设计模式(十九):享元模式

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

作者: 骑着母猪砍大象 | 来源:发表于2018-12-18 19:49 被阅读18次

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

    运行平台: Windows

    php版本: php7.0

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


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

    角色

    • 享元工厂角色(FWFactory):创建并管理BlogModel对象。
    • 所有具体享元父接口角色(BolgModel):接受并作用与外部状态。
    • 具体享元角色(JobsBlog):具体变化点,为内部对象增加储存空间。
    <?php
    
    //抽象兵工厂类
    abstract Class Arsenal{
        abstract function Create();
    }
    
    
    //具体战士类
    Class Warrior extends Arsenal
    {
        function Create()
        {
            echo "战士:保家卫国!冲啊<br/>";
        }
    }
    
    // 具体骑士类
    Class Knight extends Arsenal
    {
        function Create()
        {
            echo "骑士:冲散敌军阵形<br/>";
        }
    }
    
    // 享元类
    Class Flyweight{
        // 定义享元池
        private $flyweights = array();
    
        function getObjClass($name){
    
            if(isset($this->flyweights[$name]))
            {
                echo "*************从享元池里取出************<br/>";
                return $this->flyweights[$name];
            }
            else{
                echo "*************新建对象并存入享元池************<br/>";
                $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();
    

    参考资料

    相关文章

      网友评论

          本文标题:设计模式(十九):享元模式

          本文链接:https://www.haomeiwen.com/subject/rhfrkqtx.html