中間モデル
オブジェクト指向の設計は、オブジェクト間の動作の分布を促進し、オブジェクト間の多くの接続につながる可能性があります。最悪の場合、各オブジェクトは他のすべてのオブジェクトを知る必要があります。
システムを多くのオブジェクトに分割すると再利用性が向上する可能性がありますが、相互接続されたオブジェクトの急増は再利用性を低下させます。多数の接続関係により、他のオブジェクトの支援なしにオブジェクトが機能することを不可能にします(システムは不可分な全体として現れます)。現時点では、システムの動作に大きな変更を加えることは困難です。動作は多くのオブジェクトに分散されているため、システムの動作をカスタマイズするために多くのサブクラスを定義する必要があります。したがって、メディエーターオブジェクトメディエーターを紹介しました。
中間オブジェクトを介して、メッシュ構造のシステムは、中間を中心とした星構造に変換できます。各特定のオブジェクトは、別のオブジェクトと直接的な関係を持つことはありませんが、中間オブジェクトを介して媒介されます。また、中間オブジェクトを導入すると、新しいオブジェクトの導入により、システム構造が多数の変更を受けることはありません。
メディエーターモード:メディエーターモードとも呼ばれ、メディエーターオブジェクトを使用して一連のオブジェクトの相互作用をカプセル化するため、各オブジェクトを互いに表示して参照する必要がなく、カップリングを緩め、相互作用を独立して変更します。
(画像ソース:デザインパターン:再利用可能なオブジェクト指向ソフトウェアの基礎)ヒント:各同僚は調停者の存在のみを知っており、他の同僚が存在するかどうか(またはそれらを切り離す方法)を知る必要はありません。メディエーターにメッセージを送信するだけで、それを他の同僚に転送する必要があります(メディエーターはすべての同僚の関係を保存し、メディエーターのみが同僚の数/どの同僚がそこにいるかを知っています)。
モードの実装
国連はさまざまな国からの声明を転送し、各国との関係を仲介します。
州は、国連安全保障理事会にメッセージを送信および受信します。
カレッジ
抽象的な同僚のクラス、各同僚の公開方法を定義します。
/** * @author jifang * @since 16/8/28 4:22 pm。 */パブリックアブストラクトクラスの国{保護された国連調停者。プライベート文字列名;公共国(国連調停者、文字列名){this.mediator = mediator; this.name = name; } public string getname(){return name; }保護された抽象void declare(string msg);保護された抽象void受信(StringMSG);}----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------)
ConcreTeColleague
特定の同僚:
•すべての同僚クラスは、メディエーターオブジェクトを知っています。
•各同僚のオブジェクトは、他の同僚と通信する必要がある場合、仲介者と通信します。
クラスUSAは国を拡張します{Public USA(国連調停者、文字列名){super(mediator、name); } @Override public void declare(string msg){mediator.declare(this、msg); } @Override public void receive(string msg){system.out.println( "米国受信:[" + msg + "]"); }} class Iraqは国を拡張します{Public Iraq(国連調停者、文字列名){super(mediator、name); } @Override public void declare(string msg){mediator.declare(this、msg); } @Override public void receive(string msg){system.out.println( "Iraq receece:[" + msg + "]"); }} class China Extends Country {Public China(Untionsnations Mediator、String name){super(mediator、name); } @Override public void declare(string msg){mediator.declare(this、msg); } @Override public void receive(string msg){system.out.println( "中国受領:[" + msg + "]"); }}----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------)
メディエーター
抽象メディエーター:同僚のオブジェクトと通信するためのインターフェイスを定義します。
パブリックアブストラクトクラスの国連{Protected list <Countrie>国= new linkedlist <>(); public void Register(Country Country){countries.add(Country); } public void remove(Country Country){countries.Remove(Country); }保護された抽象void宣言(カントリーカントリー、文字列msg);}----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------)
コンクリートメディエーター
特定の仲介者:
•個々の同僚を理解し、維持する。
•各同僚のオブジェクトを調整することにより、共同行動を実現します(同僚からメッセージを受信し、特定の同僚に注文を発行します)。
Class UntundationSecurityCouncilは国連を拡張します{ / ** *安全保障理事会は中央に媒介します * * @Param MSG * / @Override Protected Void Declare(Country Tocountry:Country){for(!tocountry.equals(Country)){string name name.getname(); tocountry.receive(name + "say say feacefuly:" + msg); }}}}拡張機能がない場合、メディエーターをコンクリートメディエーターと組み合わせることができます。
•クライアント
public class client {@test public void client(){unitednations mediator = new unitednationssecuritycouncil();国USA =ニューアメリカ(メディエーター、「USA」);国中国=ニューチャイナ(メディエーター、「中国」);カントリーイラク=ニューイラク(メディエーター、「イラク」); mediator.register(米国); mediator.register(中国); mediator.register(イラク); usa.declare(「私はイラクを攻撃したい、それは私が急いでいる人を気にかけている!!!」); System.out.println( "---------------"); China.declare(「私たちは強く非難!!!」); System.out.println( "--------------------"); Iraq.Declare(「さあ、お互いを傷つけてください!!!」); }}----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------)
まとめ
調停者の出現により、各大学間の結合が減少し、同僚と調停者を独立して変更して再利用できるようになります。オブジェクトが共同作業するため、調停は独立した概念として採用され、オブジェクトにカプセル化されているため、注意の焦点は、各オブジェクト自体の動作からそれらの間の相互作用に移行し、システムをよりマクロの観点から見ることができます。
•適用性
中間モデルはシステムに簡単に適用でき、システムで簡単に誤用されます。システムに「多目的」の複雑なオブジェクトグループが表示されている場合、中間を使用するために急いではいけません。システム設計が妥当かどうかを最初に考えるのが最善です。コンクリートメディエーターは集中化を制御するため、相互作用の複雑さは仲介者の複雑さになり、中間者はどのコンクリートコレアよりも複雑になります。次の状況では、仲介モデルを使用することをお勧めします。
◦明確に定義されているが複雑な方法で通信するオブジェクトのグループ。結果として生じる相互依存関係は混乱しており、理解するのが困難です。
◦オブジェクトは他の多くのオブジェクトを参照し、これらのオブジェクトと直接通信するため、オブジェクトの再利用が困難になります。
◦複数のクラスに分配された動作をカスタマイズしたいが、サブクラスが多すぎて生成したくない。
•関連モード
◦Facadeは、オブジェクトサブシステムを抽象化するため、メディエーターとは異なり、より便利なインターフェイスを提供します。そのプロトコルは単方向です。つまり、ファサードオブジェクトはこのサブシステムクラスにリクエストを行いますが、それ以外の場合はできません。それどころか、メディエーターは、各大学のオブジェクトでサポートされていない、またはサポートできないコラボレーション行動を提供し、プロトコルは多方向です。
◦Colleagueは、オブザーバーモードを使用してメディエーターと通信できます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。