記事ディレクトリ
⚾️スマートホームプロジェクト
- スマートホームには、目覚まし時計、コーヒーメーカー、テレビ、カーテンなどのさまざまなデバイスが含まれます。
- 飼い主がテレビを見たいと思ったとき、アラームが鳴る→コーヒーメーカーがコーヒーを淹れ始める→自動的にカーテンが降りる→テレビが始まるというように、すべての機器が連携してテレビを見るための準備を自動的に完了させることができます。
⚾️従来のソリューションでスマートホーム管理の問題を解決
⚾️従来の方法による問題分析
- 各電気オブジェクトに複数の状態変化がある場合、それらの間の呼び出し関係はより複雑になります。
- それぞれの電気物体は相互に接続されており、あなたには私がいて、私にはあなたがいます。これは疎結合を助長しません。
- さまざまな電気製品間で受け渡されるメッセージ (パラメータ) は混同されやすい
- システムが新しい電気オブジェクトを追加する場合、または実行プロセスが変更される場合、コードの保守性と拡張性は理想的ではありません。
⚾️仲介モードの基本的な紹介
- Mediator パターンは、中間オブジェクトを使用して、一連のオブジェクトの対話をカプセル化します。メディエーターは、相互への明示的な参照の必要性を排除することでオブジェクトを疎結合にし、それらの相互作用は独立して変更できます。
- メディエーター パターンは、コードの保守を容易にする動作パターンです。
- たとえば、MVC モードでは、C (コントローラー コントローラー) が M (モデル モデル) と V (ビュー ビュー) の間の仲介者となり、フロントエンドとバックエンドの対話において仲介者の役割を果たします。
⚾️中間モードの原理クラス図
⚾️原理クラス図の説明 - つまり(中間モデルの役割と責任)
- Mediator は抽象メディエーターであり、ホームからメディエーター オブジェクトへのインターフェイスを定義します。
- Colleague は抽象ホーム (共通のメソッドを持つクラス) クラスです
- ConcreteMediator は、抽象メソッドを実装する特定の中間オブジェクトです。ConcreteMediator は、特定の家庭用家具クラスをすべて知っている必要があり、
コレクションで HashMap を管理し、対応するタスクを完了するために特定の家庭用オブジェクト メッセージを受信する必要があります。 - ConcreteColleague 多くの特定のホームファニシングクラスがあり、各ホームは自分の動作のみを知り、他のホームファニシングクラスの動作(メソッド)を理解していませんが、それらはすべて中間オブジェクトに依存しています
⚾️仲介モデルの応用例 - スマートホーム管理
⚾️アプリケーションインスタンスの要件
Mediator パターンを使用して、前のスマート ホーム プロジェクトを完了する
⚾️思考分析と図表(クラス図)
⚾️ コードの実装
Colleague クラス、メディエーターを含む同僚のための抽象クラス
4つのサブクラス
アラームクラス
CoffeeMachine クラス
カーテンクラス
テレビ部門
ConcreteMediator クラス
特定の仲介者、特定のイベントは仲介者によって制御され、columbiaMap にはすべての同僚クラスが格納されます。
クライアントクラス
⚾️デバッグして原理を確認する
- アラームを作成する
- ConcreteMediator オブジェクトの HashMap に追加されました
- 他の 3 人の同僚のクラスは同じです
4. 仲介者が 4 人の同僚のクラスを引き継ぎました。
5. 次に、要件を実行します。闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放
6. 中間メソッドを呼び出す
7. コーヒー作りを始める
8. コーヒーの準備ができました
9. 仲介情報の送信
10. カーテンを閉める
11. 仲介業者への情報送信
12.テレビをつける
13. 目覚まし時計がまた思い出させる
14. テレビを消す
これまでのところ、プロセスは完了しており、各同僚クラスは他の同僚クラスのメソッドを呼び出しておらず、すべての操作は仲介者の助けを借りて完了しています。
⚾️JDKでの仲介モードの適用
- jdk の Timer クラスは中間モードを使用します。Timer
は Java によって提供されるネイティブ スケジューラ (タスク スケジューリング) ツール クラスであり、バックグラウンド スレッドで指定されたタスクを計画および実行するために使用されます。 - ソースコード分析
sched を呼び出すスケジュール オーバーロード メソッドが多数あります
sched メソッドは、TaskQueue を使用してタスクを保存し、そのメソッドを呼び出します。
したがって、タイマー クラスは仲介者の ID に似ています。
⚾️メディエーターモードの注意事項と詳細
- 複数のクラスが相互に結合されてネットワーク構造を形成し、中間モードを使用してネットワーク構造をスター構造に分離して分離します。
- クラス間の依存関係を減らし、結合を減らし、Dimit 原則に準拠します。
- 仲介者の責任が重くなり、仲介者に問題が発生するとシステム全体に影響が出る
- 設計が適切でないと、中間オブジェクト自体が複雑になりすぎるため、実際に使用する場合は特に注意が必要です
つまり、この記事の説明を通じて、皆さんも仲介モデルについての理解が深まったと思います。中間モードでは複数のオブジェクトが連携する必要がありますが、オブジェクト間の分離も実現され、複雑さの維持と拡張が容易になります。開発では、中間モデルを使用してコード機能を最適化し、コードの可読性、拡張性、保守性を向上させることができます。設計で問題が発生した場合は、プログラム ロジックを簡素化するためにメディエーター パターンを使用するかどうかを検討できます。
最後に、この記事が開発者が中間モデルをよりよく理解し、使用して開発レベルと能力を向上させるのに役立つことを願っています。
データ参照: https://www.bilibili.com/video/BV1G4411c7N4
コードアドレス: https://gitee.com/WangFuGui-Ma/design-pattern/tree/master/design