Home >Backend Development >PHP Tutorial >PHP design pattern visitor pattern

PHP design pattern visitor pattern

WBOY
WBOYOriginal
2016-08-08 09:31:35858browse

Visitor pattern is actually a pattern that allows external classes to obtain the objects of each node of the tree structure and operate on each object. It allows us to extend functions without changing the original tree structure, such as Statistics and more.

In this mode, there are several elements that must be present:

1. Specific element object, the location (i.e. node) that the visitor actually wants to visit

2. Stable tree structure , each node is an element object, usually more in combination mode. It provides the actual location that visitors can access (that is, the visitor accesses the instantiation object of a node in a specific attribute structure. );

3. Visitor interface, here defines the visitor's interface method, which is a method that is used in every node; it is used to reference the visitor at the node, so that the visitor can access the current node.

4. The specific implementation of the visitor inherits the visitor interface to implement the interface methods

//定义元素接口
abstract class User
{
    public function getPoint()
    {
        return rand();//改数据应该由数据库中读取,这里就直接模拟某个值了、
    }
    
    //这里的accept方法用于把访问者引入,在这个方法里,$visitor访问者可以通过User类获取需要的数据进而进行相应的操作。
    abstract function accept(UserVisitor $visitor);
}

//定义元素接口
class VipUser extends User
{
    //在这里getPoint()具体实现就由接口中实现了

    //在这里就把当前对象传递给了visitor访问者,在访问者类的visitVip方法中就能根据$this获取必要的数据进行相应的操作
    public function accept(UserVisitor $vitor)
    {
        $vitor->visitVip($this);   
    }
}
class NormalUser extends User
{
    //同上的getPoint()具体实现就由接口中实现了
    //同VipUser类中的accept
    public function accept(UserVisitor $vitor)
    {
        $vitor->visitNormal($this);
    }
}


//定义访问者接口
abstract class UserVisitor
{
    //访问者必须要实现的访问不同用户的接口方法
    abstract function visitVip(User $user);
    abstract function visitNormal(User $user);  
}

//积分操作的访问者实现
class PointActVisitor extends UserVisitor
{
    public function visitVip(User $user)
    {
        echo 'Vip用户+10分<br/>';
    }
    
    public function visitNormal(User $user)
    {
        echo 'Normal用户+5分<br/>';
    }
}

//用户树形结构
class Users
{
    protected $users;
    public function addUser(User $user)
    {
        $this->users[] = $user;
    }
}

The above introduces the visitor mode of PHP design pattern, including aspects of the content. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn