PHPモードオブザーバーデザインパターンのコード例

PHPはSPLObserverインターフェース二つのインターフェース、観察SplSubjectへのインタフェース、一つまたはそれ以上の視聴者を提供し、クラスオブジェクトを格納することができるSplObjectStorage。三つの方法がオブザーバーは、オブザーバーを追加添付として理解することができ、これらの3つのメソッドを実装する必要がループに通知行うオブザーバーとして理解することができ、削除切り離しがありますが、オブザーバのupdateメソッド(オブザーバーを実行しますクラスにそのSplObjectStorageに基づいている)、本パスの更新方法パラメータが格納されます。
 
<?PHP
ヘッダ(" コンテンツタイプ:text / htmlの;のcharset = UTF-8 " )。

/ * *
* 
* / 
クラスログイン実装SplSubject
{
    公共$趣味。
    公共の$ loginTimes。
    保護 $オブザーバー= nullを

    関数__construct($趣味)
    {
        $ この - >趣味= $趣味。
        $ この - > loginTimes =ランド(110 )。
        $ この - >オブザーバー= 新しいSplObjectStorage();
    }

    公共機能のログイン()
    {
        // で書かれたログインのビジネスロジック
        
        $ この - > 通知();
    }

    公共の機能が添付(SPLObserver $オブザーバー)
    {
        $ これを > observers-> - ;($オブザーバー)を取り付け
    }

    パブリック関数デタッチ(SPLObserver $オブザーバ)
    {
        $ この > observers-> - ;デタッチ($オブザーバを)
    }


    公共の関数は(通知)
    {
        // の$ this - > observers->リワインド(); // の先頭に内部ポインタ
         // 一方(の$ this - > observers->有効()){
         //      $オブザーバ=の$ this - > observers->現在(); // 現在のオブジェクト取得
         //      > $ observer-を更新($この);
         //      ます$ this-> observers->次の(); // ダウンするポインタ
         // } 
        foreachの($ この - >オブザーバーAS $値){
            $値 - >更新($ この)。
        }
    }
}

// ユーザープッシュ-オブザーバ
クラスPushUser実装SplObserver
{
    公共の機能アップデート(SplSubject $件名)// ビューアーによって渡されたが
    、{
         // 独自のビジネスロジックを記述
        IF($サブジェクト>ホビー== スポーツ){
            エコースポーツ製品は<BR>プッシュ
        } {
            エコープッシュホット製品<BR> 
        }
    }
}

// セキュリティ情報のプッシュ-オブザーバ
クラスPushSecurity実装SplObserver
{
    公共の機能アップデート(SplSubject $件名)// ビューアーによって渡されたが
    、{
         // 独自のビジネスロジックを記述
        IF($サブジェクト> logintimes < 5 ){
            エコーあなたの最初の日 $サブジェクト> logintimes .. 回セキュアなログイン<BR> 
        } {
            エコーあなたの最初の日 $サブジェクト> logintimes .. 回セキュアログイン、異常<BR>ログイン
        }
    }
}

// ニュースフィード-オブザーバ
クラスPushNews実装SplObserver
{
    公共の機能更新(SplSubject $対象)
    {
        // 彼らのビジネスロジックを記述
        IF($サブジェクト>ホビー== ' スポーツ' ){
            エコープッシュスポーツニュース<BR> 
        } {
            エコーホットニュース<BR>を押して;
        }
    }
}


ユーザー$ = 新しい新しいログイン(スポーツ); // 観測されたのインタフェースクラスの実装作成 
する$ user->(添付新しい新しい PushNewsを()); //は、インタフェースクラスオブザーバの一の実装で渡し 
する$ user-を>添付(新新PushUser());
$ユーザー - >添付(新しいPushSecurity());
$ユーザー - >ログイン();

 

おすすめ

転載: www.cnblogs.com/Mishell/p/12182197.html