最初に定義について話すのはやめて、最初にアプリケーション シナリオを見てみましょう。Lao Meng さん、シナリオからデザイン パターンを考える方が明らかに理解しやすいです。
シナリオ: 新しいユーザー名を登録した後、何をする必要がありますか: 1. 新しいユーザーにポイントを送信しますか? 2. 新しいユーザーに割引を受けますか? 3. 新しいユーザーのログを記録します
オブザーバー モード:
シナリオを通じて分析できますユーザーが登録した後、システムは一連のビジネス ロジックをオブザーバー (ポイント オブザーバー、割引オブザーバー、ログ オブザーバーなど) として考えることができます。
これらのオブザーバーはユーザー クラスをリッスンしています。 、ユーザーが登録アクションを実行した後、オブザーバーはそれぞれ独自のビジネス ロジックを開始します。
分析: アプリケーション シナリオ全体は 2 つのクラスで完了できます。1 つはオブザーバー クラス、もう 1 つは監視対象クラス (テーマ) です。これらのクラスには独自のインターフェイスがあり、オブザーバー クラスのインターフェイスは、監視対象からの通知を受信します。その後、ステータスを更新します。オブザーバーインターフェイスは
//Subject クラスインターフェイス (observer)
interface SubjectInterface{
public function addObserver();
}
//Observer インターフェイス
interface ObserverInterface{
public function beginActionAfterNotifity();
}
//Subject クラス
class Subjectimplements SubjectInterface{
private $_oberver=array();
//オブザーバーを追加
public function addObserver($observer){
$ this -& gt; _oberver [] = $ Oberver
}
// 通知
パブリック関数 notification () {
Foreach ($ this- & gt; _oberver as $ oberver) {
$ oberver- & gt; );
}
}
}
//Point クラス
class Point は ObserverInterface を実装します{
public function beginActionAfterNotifity(){
echo "ポイントがプレゼントされます";
}
}
//Discount クラス
class Coupon は ObserverInterface を実装します{
public function beginActionAfterNotifity () {
((? ";
}}} // Log Class
Class Log Implements ObserverInterface {
Public Function BeginAFTERNOTIFITITITO () {
" "" "" "((((";
}
}
//アクションクラス
class User {
Function addUser(){
use using 's 's 's to 's to use 's アウト アウト アウト アウト アウト‐‐ $ subject->addObserver(new Point());
$subject->addObserver(new Coupon());
$subject->addObserver(newログ());
}
}