Java設計モード(二十二)仲介者モード


仲介者モード
定義#テイギ#
調整者モードまたは調停者モードとも呼ばれる.一連のオブジェクトインタラクションを1つの仲介オブジェクトでカプセル化し、仲介者は各オブジェクトを表示する必要のない相互作用させ、結合を緩やかにし、独立してそれらの間のインタラクションを変更することができる.動作モードに属します.
仲介者モードは一連のオブジェクト相互作用の方式を包装した.これらのオブジェクトが互いに顕著に作用する必要がないようにします.これにより、結合を緩和することができる.一部のオブジェクト間の作用が変化すると、他のオブジェクト間の作用はすぐには影響しません.これらの役割が互いに独立して変化することを保証します.その核心思想は仲介という構造システムの各階層オブジェクトの直接結合を通じて、階層オブジェクトの対外依存通信はすべて仲介者に転送される.
適用シナリオ
  • システムでは、オブジェクト間に複雑な参照関係が存在し、相互依存関係構造が混乱し、理解しにくい.
  • インタラクションの共通動作は、動作を変更する必要がある場合、新しい仲介者クラスを追加することができる.

  • ロール#ロール#
  • 抽象仲介者(Mediator):同僚ロール間の通信に使用される統合インタフェースを定義します.
  • 具体仲介者(ConcreteMediator):具体的な同僚オブジェクトからメッセージを受信し、具体的な同僚オブジェクトに命令を出し、各同僚間の協力を調整する.
  • 抽象同僚(Colleague):各同僚オブジェクトは仲介者ロールに依存し、他の同僚と通信する際に仲介者に転送協力を渡す必要があります.
  • 具体的な同僚類(ConcreteColleague):自発的な行為を実現する責任を負い、転送依存方法は仲介者に協調される.
  • ≪インスタンス|Instance|emdw≫
    仲介者モードを使用してグループチャットシーンを設計する
    public class ChatRoom {
        public void showMsg(User user, String msg){
            System.out.println(String.format("[ %s ] : %s", user.getName(), msg));
        }
    }
    
    public class User {
    
        private String name;
    
        private ChatRoom chatRoom;
    
        public User(String name, ChatRoom chatRoom) {
            this.name = name;
            this.chatRoom = chatRoom;
        }
    
        public void sendMessage(String msg){
            this.chatRoom.showMsg(this, msg);
        }
    
        public String getName() {
            return name;
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            ChatRoom chatRoom = new ChatRoom();
    
            User tom = new User("tom",chatRoom);
            User jerry = new User("jerry", chatRoom);
    
            tom.sendMessage("Hi! I am Tom");
    
            jerry.sendMessage("Hello! My name is Jerry");
        }
    }
    

    仲介者モードのソースコードにおける体現
    JDKでのTimer
    メリット
  • クラス間依存性を低減し、多対多依存性を一対多に変換し、結合
  • を低減する.
  • 類間各司其職、ディミット法則
  • に合致
    欠点
    仲介者モードでは,元の複数のオブジェクトの直接的な相互依存を仲介者と複数の同僚クラスの依存関係に変えた.同僚類が多ければ多いほど、仲介者は肥大化し、複雑になり、維持しにくくなります.