设计模式之策略模式

设计模式之策略模式

策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中, 此模式让算法的变化独立于使用算法的客户。从而让程序结构更灵活,具有更好的扩展性和维护性

在实际场景中,通俗的说就是提供多个策略的模式,用户在不同的情况下可以选择不同的策略

abstract Man
{
    public function run();
    public function gongfu();//不一定每个人都会功夫
}

class zhangsan extends Man
{
    public function run()
    {
        echo '走走走 走啊走';
    }
    public function gongfu()
    {
        echo '快使用双杰轮';
    }
}

class lisi extends Man
{
    public function run()
    {
        echo '走走走 走啊走';
    }

    public function gongfu(){

    }
}

策略模式

header('content-type:text/html;charset=utf-8');
interface IGongFuBehavior
{
    public function gongfu();
}

class HideBody implements IGongFuBehavior 
{
    public function gongfu()
    {
        echo '你看不见我';
    }
}

class QingGong implements IGongFuBehavior 
{
    public function gongfu()
    {
        echo '飞檐走壁';
    }
}

class Person
{
    private $_gfBehavior;

    public function addGongFu(IGongFuBehavior $gf)
    {
        $this->_gfBehavior = $gf;
    }

    public function skill()
    {
        $this->_gfBehavior->gongfu();
    }
}

class zhangsan extends Person
{
    public function run()
    {
        echo '走走走 走啊走';
    }

}

class lisi extends Person
{
    public function run()
    {
        echo '走走走 走啊走';
    }
}

$ls = new lisi();

$ls->addGongFu(new HideBody());

$ls->skill();

总结

  1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;
  2. 针对接口编程,不针对实现编程;
  3. 多用组合,少用继承;




posted @ 2021-09-05 20:17  成文的博客  阅读(24)  评论(0编辑  收藏  举报