PHP设计模式-访问者

适用性

说说我对的策略模式和访问者模式的区分:

乍一看,其实两者都挺像的,都是实体类依赖了外部实体的算法,但是:

对于策略模式:首先你是有一堆算法,然后在不同的逻辑中去使用

对于访问者模式:实体的【结构是稳定的】,但是结构中元素的算法却是多变的,比如就像人吃饭这个动作

是稳定不变的,但是具体吃的行为却又是多变的

代码示例

/**

* 动物接口

*/

interface AnimailInterface

{

    /**

    * 行为吃

    *

    * @param  VisitorInterface $visitor 访问者

    * @return void

    */

    public function eat(VisitorInterface $visitor);

}

/**

* 实体人

*

* 人吃饭的行为是不变的,但是吃什么是依照环境而定的

*/

class Person implements AnimailInterface

{

    /**

    * 行为吃

    * 具体吃什么依照访问者而定

    *

    * @param  VisitorInterface $visitor 访问者

    * @return void

    */

    public function eat(VisitorInterface $visitor)

    {

        $visitor->eat();

    }

}

/**

* 访问者接口

*/

interface VisitorInterface

{

    /**

    * 行为吃

    *

    * @return void

    */

    public function eat();

}

/**

* 访问者实体

*

* 亚洲

*/

class VisitorAsia implements VisitorInterface

{

    /**

    * 行为吃

    *

    * @return void

    */

    public function eat()

    {

        echo "身处亚洲,所以主要吃大米咯~ \n";

    }

}

/**

* 访问者实体

*

* 美洲

*/

class VisitorAmerica implements VisitorInterface

{

    /**

    * 行为吃

    *

    * @return void

    */

    public function eat()

    {

        echo "身处美洲,所以主要吃油炸食物咯~ \n";

    }

}

// 生产一个人的实例

$person = new Person();

// 来到了亚洲

$person->eat(new VisitorAsia());

// 来到了美洲

$person->eat(new VisitorAmerica());

你可能感兴趣的:(PHP设计模式-访问者)