ジェーンは言ったデザインパターン - 仲介モデル

まず、仲介モデルは何ですか

  調停は、単語には見知らぬ人、つまり、住宅会社「仲介者」を意味している中間業者ではありません。場合フロント相互作用の後端例えばMVCパターン、C(コントローラコントローラ)は、中間のM(モデルモデル)とV(ビュービュー)で、仲介として働きます。

  仲介モデル(メディエータ)オブジェクトのセットの対話をカプセル化する中間オブジェクトと、。メディエータ各オブジェクトは、それが疎結合ように明示的に、お互いに言及していない、とそれらの間の相互作用とは独立して変更することができます。次のようにUMLの構造は次のとおりです。

  ここで、メディエータ抽象的な仲介定義された同僚は、ブローカーオブジェクトのインタフェースに反対、同僚抽象同僚クラス; ConcreteMediator特定の仲介のオブジェクト、メソッド、抽象クラスは、それが特定の同僚を特定の同僚クラスのすべてを知っている必要があり、 ConcreteColleague特定のクラスの同僚は、それぞれ特定の同僚が唯一の他の同僚のような状況を理解するのではなく、自分自身の行動を知っているが、彼らは、仲介オブジェクトに過ぎません知っている、特定のオブジェクトの同僚へのメッセージ、問題のコマンドを受け取ります。

  1.メディエータ抽象

  抽象仲介の役割は、同僚の役割間の通信のための統一されたインターフェイスを定義しました。

1  パブリック 抽象 クラスメディエータ{
 2      
。3      // メッセージを送信するための抽象メソッド
4。     パブリック 抽象 ボイド送信(文字列メッセージ、同僚の同僚);
 5      
6。 }

  2.抽象クラスの同僚

  各文字は、同僚メディエーターの役割を知っている、と私たちは他の同僚と協力しなければならないときに、仲介役を介した通信の役割。各クラスの2つの方法の同僚の挙動:一方はない依存関係他の同僚又は中間クラスと、この現象は、自発的行動と呼ばれるそのようなオブジェクト自体、その処理動作の状態を変更するよう同僚自身の行動、であり;第二種は依存メソッドと呼ばれる行為を、完了するために、仲介者に依存しなければなりません。

1人の パブリック 抽象 クラス同僚{
 2      
3      保護メディエータメディエータ。
4      
5      公共の同僚(メディエータメディエータ){
 6           .mediator = メディエーター。
7      }
 8  
9 }

  3.特定の仲介クラス

  それは、各同僚の役割に依存しなければならないので、コラボレーション同僚の行動の役割を調整することによって、特定の仲介役で。

1  パブリック クラス ConcreteMediatorは延びメディエータ{
 2  
3      プライベートConcreteColleague1のcolleague1と、
4      プライベートConcreteColleague2のcolleague2。
5      
6      公共 ボイドsetColleague1(ConcreteColleague1 colleague1){
 7          この .colleague1 = colleague1。
8      }
 9  
10      公共 ボイドsetColleague2(ConcreteColleague2のcolleague2){
 11          この .colleague2 = colleague2。
12      }
 13  
14      @Override
15      パブリック ボイド送信(文字列メッセージ、同僚の同僚){
 16          であれば(同僚== colleague1){
 17              colleague2.notify(メッセージ)。
18          } {
 19              colleague1.notify(メッセージ)。
20          }
 21      }
 22  
23 }

  4.詳細なクラスの同僚

  ここでは例えばConcreteColleague1に、ConcreteColleague2はそれらを繰り返しません。

1つの パブリック クラス ConcreteColleague1は延び同僚{
 2  
3      公共ConcreteColleague1(メディエータメディエータ){
 4          スーパー(メディエータ)
5      }
 6      
7      公共 ボイド送信(文字列メッセージ){
 8          mediator.send(メッセージ、この)。
9      }
 10      
11      公共 ボイドが通知(文字列メッセージ){
 12          のSystem.out.println( "同事1得到消息:" +のメッセージ)。
13      }
 14  
15 }

  5.クライアントクライアント

  まず、特定の仲介オブジェクトを作成し、仲介業者を介して情報を送信するクラスをインスタンス化し、2人の同僚は、メディエータ、colleague1とcolleague2と特異的に結合します。

1つの パブリック クラスクライアント{
 2      
3      公共 静的 ボイドメイン(文字列[]引数){
 4          ConcreteMediatorメディエーター= 新しいConcreteMediator()。
5          
6          ConcreteColleague1 colleague1 = 新しいConcreteColleague1(メディエータ)。
7          ConcreteColleague2 colleague2 = 新しいConcreteColleague2(メディエータ)。
8          
9          mediator.setColleague1(colleague1)。
10          mediator.setColleague2(colleague2)。
11          
12          colleague1.send( "Uはじめまして。" );
13         colleague2.send( "あまりにUはじめまして。" );
14      }
 15  
16 }

  結果は以下の通りであります:
  

仲介モデルの第二に、アプリケーション

  1.使用します

  • 複数のクラスは、ネットワーク構造を形成する場合に互いに結合

  2.方法

  • メッシュ構造は、星型構造に分離され、

  3.利点

  • 結合を低減、相互依存クラスを減少させます
  • デメテルの原則に沿って、

  4.欠点

  • メディエータは、大規模で複雑なロジックを拡大します

  5.使用シナリオ

  • 基準システム内のオブジェクトとの間のより複雑な関係の存在
  • 中産階級は、行動の複数のクラスをパッケージ化したいのですが、あまりにも多くのサブクラスを生成しません

  6.応用例

  • 様々な国家を調整するための媒介としてUN / WTO
  • 住宅会社/空港スケジューリングシステム
  • C(Contorllerコントローラ)中間のM(モデルモデル)とV(詳細図)であるMVCフレームワーク

  7.注意事項

  • ときカオス任務を使用すべきではありません

第三に、中間のモデルを達成するために

  我々は、それは仲介者の役割である、国際の経済的、社会的、文化的または人道的なキャラクターの役割の問題を解決するために、国際の平和及び安全の維持のために、国民の代表者が、国連として、上記伝達物質を言及しています、国は「国連は」むしろ直接通信よりも、メディエーターであるを通じて完全に直接関係することができます。

  ここでは、仲介モデルを見て、仲介者として、国連安全保障理事会にあります。次のようにUMLは以下のとおりです。

  1.国連機関

  抽象仲介。

1つの パブリック 抽象 クラス国際連合{
 2      
3      パブリック 抽象 ボイド宣言(文字列メッセージ、国国)。
4  
5 }

  2.国家クラス

  抽象Stateクラスは、それが仲介役を宣言する必要があります。

1つの パブリック クラス国{
 2つの     
3つの     保護された国際連合国際連合。
4      
5      公共国(国際連合国際連合){
 6           .unitedNations = 国際連合。
7      }
 8  
9 }

  3.国別のクラス

  国別のクラスでは、国は抽象クラスを継承しています。ここでは米国のクラスで、例えば、イラクのカテゴリにそれらを繰り返しません。

1  パブリック クラス米国延び国{
 2  
3      公共USA(国際連合国際連合){
 4つの         スーパー(国際連合)を、
5      }
 6      
7      公共 ボイド宣言(文字列メッセージ){
 8          unitedNations.declare(メッセージ、この)。
9      }
 10      
11      公共の ボイドのgetMessage(文字メッセージ){
 12          のSystem.out.println( "美国获得对方信息:" + メッセージ)。
13      }
 14  
15 }

  4.国連安全保障理事会

  特定の仲介役で、継承された抽象仲介は、それは別の国に異なる情報を送信するために()メソッドを宣言書き換えます。

1つの パブリック クラス UnitedNationsSecurityCouncilは延び国際連合{
 2  
3      プライベートUSA米国;
4人の     プライベートイラクイラク;
5      
6      公共 ボイドsetUsa(USA USA){
 7          この .usa = USA。
8      }
 9  
10      公共 ボイドsetIraq(イラクイラク){
 11          この .iraq = イラク。
12      }
 13  
14      @Override
 15      公共 ボイド宣言(文字列メッセージ、国国){
16          であれば(国== USA){
 17              iraq.getMessage(メッセージ)。
18          } {
 19              usa.getMessage(メッセージ)。
20          }
 21      }
 22  
23 }

  5.クライアントクライアント

  国連安全保障理事会のオブジェクトの例として、国連安全保障理事会を通じて両国間の対話。

1つの パブリック クラスクライアント{
 2  
3。     公共 静的 ボイドメイン(文字列[]引数){
 4。         
5。          UnitedNationsSecurityCouncil UNSC = 新しい新しいUnitedNationsSecurityCouncil();
 6          
。7          USA USA = 新しい新しいUSA(UNSC)
 。8          イラクイラク= 新しい新しいイラク(UNSC)
 。9          
10          UNSC.setUsa(米国)、
 11          UNSC.setIraq(イラク);
 12          
13          usa.declare( "核兵器を開発することができ" );
 14          iraq.declare( "我々は核兵器を持っていない" );
 15     }
 16  
17 }

  結果は以下の通りであります:

  

 

  送信元アドレス:https://gitee.com/adamjiangwh/GoF 

おすすめ

転載: www.cnblogs.com/adamjwh/p/10959987.html