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());

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文首发于个人博客:Lam's Blog - 谈谈23种设计模式在Android源码及项目中的应用,文章由Mark...
    格子林ll阅读 10,113评论 1 105
  • 设计模式分类 总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原...
    lifeline丿毅阅读 4,968评论 0 2
  • 前言 前几天在GitHub看到一篇写PHP简洁之道的译文,觉得还不错,所以转在了自己的博客中,只不过有一些地方好像...
    guanguans阅读 3,674评论 3 6
  • 今天早晨在处理练习时遇到了另一种类型的题目。 外语社团共50人,其中参加法语社团的有20人,参加英语社...
    芳菲_岁月阅读 1,384评论 0 0
  • ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​...
    小茜茜公主阅读 1,768评论 0 7