访问者模式(Visitor)

概念介绍

简单来说,就是本来你的类里有一个方法,后来因为总总原因,你需要增加新的方法,于是你不断修改这个类。

访问者模式,可以让你不用一直新增方法,不用改原来的类,而是通过新增一个类注入原有类来实现新增方法的目的。

原有类

Unit.php 基类

class Visitor{

}

class Unit{
//注意这个方法,非常关键,你现在可能没看懂,接着往下看,然后再回来看。
public function accept(Visitor $visitor){
$method = 'visit'. get_class($this);

if (method_exists($visitor, $method)) {
$visitor->$method($this);
}
}
}

user.php 具体类

class User extends Unit{
public function getName(){
//获取名字
return 'chen';
}
}

不修改User类,达到新增一个方法的目的

如果要不修改User类,达到新增一个方法的目的,我们需要新增一个访问者类:

class getPhoneVistor extends Visitor{
public function visitUser(){
//获取电话
echo '1771067....';
}
}

使用

$user = new User();
//正常获取名字
#$user->getName();
//通过访问者获取电话
$phone = $user->accept(new getPhoneVistor());

print_r($phone);

总结

这其实是一个比较抽象的设计模式,如果你在百度搜教程,可能会被带偏,这里我把它最小化精简了,并指出其实质,用一个类来实现新增方法

tags: PHP,设计模式