仲介モデル
仲介モデル(Mediatorパターン)は、オブジェクトと複数のクラス間の通信の複雑さを低減するために使用されます。 このモデルは、一般的に維持するためにコードが容易になり、異なるクラス、および疎結合のための支持体との間の通信を処理する中間クラスを提供します。 メディエータパターンは、行動パターンに属します。
入門
意図:オブジェクトのセットをカプセル化する中間オブジェクトの使用は、疎結合を作り、明示的に相互に参照するから中間保持オブジェクトを相互に作用し、独立してそれらの間の相互作用を変更することができます。
主に解決するために:オブジェクトとオブジェクト間の関係がたくさんある、これは必然的にシステムの構造につながるが非常に複雑になりますが、オブジェクトが変更された場合、我々はまた、それに関連するオブジェクトを追跡し、適切な治療を行う必要があり。
ときに使用する:相互に結合された複数のクラスを、ネットワーク構造を形成します。
修正方法:上記のネットワーク構造は、スター構造に分離されます。
キーコード:同僚のオブジェクト間の通信を別々のクラスをカプセル化します。
応用例:1、中国のWTO加盟は各国が互いに、複雑な構造との貿易である前に、それはお互いに取引するWTOの国があります。2、空港のスケジューリングシステム。 3、C(コントローラ)はM(モデル)とV(ビュー)メディエーターであるMVCフレームワーク、。
利点:1、クラスの複雑さを低減するには、一対多に変換されます。2、クラス間のそれぞれのデカップリング。 デメテルの原則に沿って、3、。
短所:大規模なブローカーが複雑で、維持が困難になります。
使用シナリオ:1オブジェクトの構造を再利用するために混乱と困難それらの間の依存性につながる、システムをより複雑な参照関係にあるオブジェクトの間に存在します。2、複数のクラスの振る舞いをカプセル化する中産階級をしたい、とあまりにも多くのサブクラスを生成する必要はありません。
注:それはときに責任の混乱を使用すべきではありません。
実現
それでは、仲介モデルのチャットルームのインスタンスを見てみましょう。 たとえば、複数のユーザーは、メッセージがすべてのユーザーに表示され、チャットルーム、チャットルームへのメッセージを送信することができます。 我々は2つのクラスのチャットルームとユーザーを作成します。ユーザーが自分のニュースを共有するためのチャットルームの方法をオブジェクト。
MediatorPatternDemoは、我々は彼らとの間の通信を表示するには、Userクラスのオブジェクトの使用を示します。
ステップ1
中間クラスを作成します。
ChatRoom.java
輸入java.util.Date; パブリッククラスチャットルーム{ パブリック静的ボイドshowMessage(ユーザーuser、String型のメッセージ){ System.out.println(新しいDate()。ToStringメソッド() + "[" + User.getName()+ "]:" +メッセージ)。 } }
ステップ2
ユーザークラスを作成します。
User.java
パブリッククラスユーザー{ プライベート文字列名; 公共の文字列のgetName(){ 名前を返します。 } 公共ボイドのsetName(文字列名){ this.name =名; } パブリックユーザー(文字列名){ this.name =名; } 公共ボイドのsendMessage(文字列メッセージ){ ChatRoom.showMessage(これは、メッセージ)。 } }
ステップ3
それらの間の通信を表示するには、Userオブジェクトを使用します。
MediatorPatternDemo.java
パブリッククラスMediatorPatternDemo { 公共の静的な無効メイン(文字列[] args){ ユーザーロバート=新しいユーザー( "ロバート"); ユーザーJohn =新しいユーザー( "ジョン"); robert.sendMessage(「こんにちはジョン!! "); john.sendMessage(「こんにちはロバート!! "); } }
ステップ4
出力を確認します。
木1月31日夜04時〇五分46秒IST 2013 [ロバート] :!こんにちはジョン! 木1月31日夜04時〇五分46秒IST 2013 [ジョン] :!ハローロバート!