Besuchermuster des PHP-Designmusters

WBOY
Freigeben: 2016-08-08 09:31:35
Original
829 Leute haben es durchsucht

Der Besuchermodus ist eigentlich ein Modus, der es externen Klassen ermöglicht, die Objekte jedes Knotens der Baumstruktur abzurufen und auf jedes Objekt zuzugreifen. Dadurch können wir auf die Änderung der ursprünglichen Baumstruktur verzichten als Statistiken usw.

In diesem Modus müssen mehrere Elemente vorhanden sein:

1. Das spezifische Elementobjekt, auf das der Besucher tatsächlich zugreifen möchte Position (d. h. Knoten)

2. Stabile Baumstruktur, jeder Knoten ist ein Elementobjekt, im Allgemeinen eher im Kombinationsmodus, bietet es Besuchern die Möglichkeit, den tatsächlichen Standort des Besuchs ( Das heißt, der Besucher greift auf das instanziierte Objekt eines Knotens einer bestimmten Attributstruktur zu.

3. Hier wird die Schnittstellenmethode des Besuchers definiert in jedem Knoten wird es verwendet, um den Besucher am Knoten zu referenzieren, sodass der Besucher auf den aktuellen Knoten zugreifen kann.

4. Die spezifische Implementierung des Besuchers erbt die Besucherschnittstelle, um die Schnittstellenmethode

//定义元素接口
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;
    }
}
Nach dem Login kopieren

zu implementieren

Das Obige stellt den Besuchermodus des PHP-Entwurfsmusters vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage