ホームページ バックエンド開発 PHPチュートリアル PHP デザイン パターン 訪問者パターン

PHP デザイン パターン 訪問者パターン

Aug 08, 2016 am 09:31 AM
abstract function public user

Visitor パターンは、実際には、外部クラスがツリー構造の各ノードのオブジェクトを取得し、各オブジェクトを操作できるようにするパターンで、元のツリー構造を変更せずに、統計などの機能を拡張できます。

このモードでは、いくつかの要素が存在する必要があります:

1. 特定の要素オブジェクト、訪問者が実際に訪問したい場所 (つまり、ノード)

2. 安定したツリー構造各ノードは要素オブジェクトであり、通常は組み合わせモードで、訪問者がアクセスできる実際の場所を提供します (つまり、訪問者は特定の属性構造内のノードのインスタンス化オブジェクトにアクセスします)。訪問者インターフェイス。ここでは訪問者のインターフェイス メソッドを定義します。これは、訪問者が現在のノードにアクセスできるように、ノードで訪問者を参照するために使用されるメソッドです。

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 チュートリアルに興味のある方の参考になれば幸いです。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

機能とはどういう意味ですか? 機能とはどういう意味ですか? Aug 04, 2023 am 10:33 AM

機能とはどういう意味ですか?

iOS の開発者バージョンとパブリック バージョンの違いは何ですか? iOS の開発者バージョンとパブリック バージョンの違いは何ですか? Mar 01, 2024 pm 12:55 PM

iOS の開発者バージョンとパブリック バージョンの違いは何ですか?

MySQL.procテーブルの役割と機能の詳しい説明 MySQL.procテーブルの役割と機能の詳しい説明 Mar 16, 2024 am 09:03 AM

MySQL.procテーブルの役割と機能の詳しい説明

Python の「enumerate()」関数の目的は何ですか? Python の「enumerate()」関数の目的は何ですか? Sep 01, 2023 am 11:29 AM

Python の「enumerate()」関数の目的は何ですか?

Docker マウントディレクトリの権限の問題を解決する方法 Docker マウントディレクトリの権限の問題を解決する方法 Feb 29, 2024 am 10:04 AM

Docker マウントディレクトリの権限の問題を解決する方法

Vue.use関数の使い方と機能 Vue.use関数の使い方と機能 Jul 24, 2023 pm 06:09 PM

Vue.use関数の使い方と機能

PHP の file_exists() 関数 PHP の file_exists() 関数 Sep 14, 2023 am 08:29 AM

PHP の file_exists() 関数

js関数の使い方は何ですか js関数の使い方は何ですか Oct 07, 2023 am 11:25 AM

js関数の使い方は何ですか

See all articles