前回の記事「PHP の結合モードの詳細分析」では、PHP の結合モードについて紹介しましたが、次の記事では、PHP デザイン パターンの中間モードについて説明します。
前回述べたように、私たちのような外で働く人は、あるタイプの人物、つまり不動産業者と深く接触することがよくあります。大学を卒業してすぐに好きな街に家を買える第二世代X世代は検討の対象外です。家を長期間借りる必要があるため、仕事や生活の変化により必然的に1~2年、あるいは3~5年ごとに不動産屋とやり取りすることになります。私たちが家を借りるとき、私たちは家主の情報を必ずしも知っているとは限らず、家主も私たちの情報を知る必要はなく、すべて仲介業者が処理します。ここで仲介者がコミュニケーションの架け橋となるのですが、この状況は実際、住宅所有者が海外に行く、または海外で用事があり、家を完全に仲介者の手に委ねるような状況です。この状況と同様に、コードの世界でも、これはメディエーター パターンの典型的な適用例です。
GoF 定義: 中間オブジェクトを使用して、一連のオブジェクトの対話をカプセル化します。メディエーターにより、オブジェクトが相互に明示的に参照する必要がなくなり、オブジェクトが疎結合になり、オブジェクト間の相互作用を独立して変更できるようになります
GoF クラス図
コード実装
abstract class Mediator { abstract public function Send(String $message, Colleague $colleague); } class ConcreteMediator extends Mediator { public $colleague1; public $colleague2; public function Send(String $message, Colleague $colleague) { if ($colleague == $this->colleague1) { $this->colleague2->Notify($message); } else { $this->colleague1->Notify($message); } } }
抽象メディエーターと具体的な実装。ここでは、2 つが固定されていると仮定します。同僚クラスを使用すると、会話できるようになります。したがって、入力する同僚が 1 の場合、2 の Notify メソッドを呼び出します。これは、2 に 1
abstract class Colleague { protected $mediator; public function __construct(Mediator $mediator) { $this->mediator = $mediator; } } class ConcreteColleague1 extends Colleague { public function Send(String $message) { $this->mediator->Send($message, $this); } public function Notify(String $message) { echo "同事1得到信息:" . $message, PHP_EOL; } } class ConcreteColleague2 extends Colleague { public function Send(String $message) { $this->mediator->Send($message, $this); } public function Notify(String $message) { echo "同事2得到信息:" . $message; } }
Colleague クラスおよび特定の実装からのメッセージを受信させるのと同じです。ここで確認する必要があるのは、次のとおりです。各同僚タイプは仲介者のみを知り、他の同僚タイプは知りません。これは仲介者の特性であり、両者はお互いを知る必要はありません。
$m = new ConcreteMediator(); $c1 = new ConcreteColleague1($m); $c2 = new ConcreteColleague2($m); $m->colleague1 = $c1; $m->colleague2 = $c2; $c1->Send("吃过饭了吗?"); $c2->Send("没有呢,你打算请客?");
クライアントの呼び出しは比較的簡単です。
As 起業家はプロジェクト管理の重要性を知っており、プロジェクトマネージャーは多くの場面で仲介者の役割を果たします。組織的な観点から見ると、プロジェクトの開始時と終了時には、上司として誰がコーディングするかは気にする必要はなく、コミュニケーションを取りたいのはプロジェクト マネージャーだけです。同様に、他の補助部門には財務、人事、管理などが含まれます。彼らは誰がコードを書くかは気にしませんが、プロジェクトのステータスと何を調整する必要があるかを理解するためにプロジェクトマネージャーと通信するだけで済みます。プロジェクト チームの中でコードを書く人はどうでしょうか?誰が給与を支払うのか、勤怠の問題がどこにあるのかを知る必要はなく、これらはすべてプロジェクト マネージャーが解決できます。したがって、プロジェクトマネージャー責任制の下でのプロジェクト開発は、中間モデルの典型的な適用例となります。私たちの携帯電話工場がこれほど急速に発展しているのは、このプロジェクト マネージャーのおかげです。夜は彼らに豪華なディナーをごちそうしましょう~~~
コード全文: https:// github.com/zhangyue0503/designpatterns-php/blob/master/15.mediator/source/mediator.php
投稿しません今回はテキストメッセージができたので、チャットルームを実装してみましょう。簡易オンライン チャット ルームの要件は、チャット ルームに入ったユーザーがオンライン チャットできるようにすることですが、このチャット ルームを仲介モードを使用して実装する方法を見てみましょう。
チャット ルーム クラスの図
完全なソース コード: https://github.com/zhangyue0503/designpatterns- php /blob/master/15.mediator/source/mediator-webchat.php
<?php abstract class Mediator { abstract public function Send($message, $user); } class ChatMediator extends Mediator { public $users = []; public function Attach($user) { if (!in_array($user, $this->users)) { $this->users[] = $user; } } public function Detach($user) { $position = 0; foreach ($this->users as $u) { if ($u == $user) { unset($this->users[$position]); } $position++; } } public function Send($message, $user) { foreach ($this->users as $u) { if ($u == $user) { continue; } $u->Notify($message); } } } abstract class User { public $mediator; public $name; public function __construct($mediator, $name) { $this->mediator = $mediator; $this->name = $name; } } class ChatUser extends User { public function Send($message) { $this->mediator->Send($message . '(' . $this->name . '发送)', $this); } public function Notify($message) { echo $this->name . '收到消息:' . $message, PHP_EOL; } } $m = new ChatMediator(); $u1 = new ChatUser($m, '用户1'); $u2 = new ChatUser($m, '用户2'); $u3 = new ChatUser($m, '用户3'); $m->Attach($u1); $m->Attach($u3); $m->Attach($u2); $u1->Send('Hello, 大家好呀!'); // 用户2、用户3收到消息 $u2->Send('你好呀!'); // 用户1、用户3收到消息 $m->Detach($u2); // 用户2退出聊天室 $u3->Send('欢迎欢迎!'); // 用户1收到消息
説明
元のアドレス: https://juejin.cn/post/6844903975192363015
著者: ハードコア プロジェクト マネージャー
推奨調査: " PHP ビデオ チュートリアル "
以上がPHP の中間モデルに関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。