PHP 디자인 패턴 방문자 패턴

WBOY
풀어 주다: 2016-08-08 09:31:35
원래의
829명이 탐색했습니다.

방문자 모드는 실제로 외부 클래스가 트리 구조의 각 노드의 객체를 획득하고 각 객체에 대해 작업을 수행할 수 있도록 하는 모드입니다. 통계 등으로

이 모드에는 다음과 같은 여러 요소가 있어야 합니다.

1. 방문자가 실제로 액세스하려는 특정 요소 개체입니다. 위치(예: 노드)

2. 안정적인 트리 구조, 각 노드는 요소 개체이며 일반적으로 조합 모드에서 방문자에게 실제 방문 위치( 즉, 방문자는 특정 속성 구조의 노드의 인스턴스화된 개체에 액세스합니다.

3. 방문자 인터페이스는 여기에서 방문자의 인터페이스 방법을 정의하는데 사용됩니다. 모든 노드에서 방문자가 현재 노드에 액세스할 수 있도록 노드에서 방문자를 참조하는 데 사용됩니다.

4. 방문자의 특정 구현은 방문자 인터페이스를 상속하여 인터페이스 메소드

//定义元素接口
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;
    }
}
로그인 후 복사

를 구현합니다. 위 내용은 내용의 측면을 포함하여 PHP 디자인 패턴의 방문자 모드를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿