为了账号安全,请及时绑定邮箱和手机立即绑定

PHP设计模式(二十)—访问者模式(Visitor Pattern)

标签:
PHP

访问者模式(Visitor Pattern) : 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

(一)为什么需要访问者模式

访问者模式能够在不更改对象的情况下向该对象添加新的功能性

(二)访问者模式 UML图
图片描述
访问者模式UML图通常是比较复杂,如果对于只有一个元素和一种访问者,我们其实也可以不用抽象元素和抽象访问者,不要objectStruct。
下图给出《PHP设计模式》中的访问者模式UML图。
图片描述

(三)简单实例

由于访问者模式的复杂,可能一开始大家看了好久也不知其所然。我也是看了好久都不知道访问者模式的意思。所以这里我只用《PHP设计模式》一书中的UML图,实现如何在不更改对象的情况下向该对象添加新的功能性。

<?php
//具体元素
class Superman{
    public $name;
    public function doSomething(){
        echo '我是超人,我会飞'.PHP_EOL;
    }
    public function accept(Visitor $visitor){
        $visitor->doSomething($this);
    }
}
//具体访问者
class Visitor{
    public function doSomething($object){
        echo '我可以返老还童到'.$object->age = 18;
    }
}
//实例化具体对象
$man = new Superman;
//使用自己的能力
$man->doSomething();
//通过添加访问者,把访问者能能力扩展成自己的
$man->accept(new Visitor);

我们可以看到,通过调用accept方法接收一个访问者,具体对象可以把访问者的doSomething能力也扩展为自己能力。当然如果你需要多个扩展能力,你可以有多个访问者。而accept方法调用访问者的dosomething方法时,传入$this是为了能使用Superman的属性和方法,使其感觉扩展完就是Superman的真正一部分。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消