中間モデル
概要概要
- 中間モデルは一種の行動モデルです。
- 中間オブジェクトを使用して一連のオブジェクトの相互作用をカプセル化することは、Dimitの原則に沿っており、元の1対多の関係を1対1の関係に変え、クラス間の結合を減らします。
キャラクター紹介
- 抽象メディエータークラス:同僚オブジェクトからメディエーターオブジェクトへのインターフェースを定義します。
- 特定のメディエータークラス:抽象メディエーターを継承し、親クラスによって定義されたメソッドを実装し、特定の同僚からメッセージを受信し、特定の同僚にメッセージを送信します。
- 抽象同僚クラス:中間オブジェクトのインターフェースを定義します。
- 特定の同僚クラス:同僚クラスを継承および抽象化し、中間オブジェクトにメッセージを送信し、中間オブジェクトからメッセージを受信します。
基本的な実現
少し前に武当派とエメイ派の弟子がダリ・ジンガンジに殺されました。ダリ・ジンガンは少林寺の独特の学習に言及しました。問題が重要で少林寺が強力だったため、武当派とエメイ派は直接行くことができませんでした。下の図に示すように、少林寺は武当派の指導者にのみ報告することができ、武当派の指導者が仲介します。
抽象中間クラス
//抽象中介者类
public abstract class Mediator {
public abstract void notice(String message, Collegue collegue);
}
抽象同僚クラス
//抽象同事类
public abstract class Collegue {
protected Mediator mediator;
public Collegue(Mediator mediator) {
this.mediator = mediator;
}
}
特定の同僚クラス
//具体同事类:武当派
public class Wudang extends Collegue {
public Wudang(Mediator mediator) {
super(mediator);
}
public void sendMessage(String message) {
mediator.notice(message, this);
}
public void getNotice(String message) {
System.out.println("武当派收到消息:" + message);
}
}
//具体同事类:峨眉派
public class Emei extends Collegue {
public Emei(Mediator mediator) {
super(mediator);
}
public void sendMessge(String message) {
mediator.notice(message, this);
}
public void getNotice(String message) {
System.out.println("峨眉派收到消息:" + message);
}
}
//具体同事类:少林寺
public class Shaolin extends Collegue {
public Shaolin(Mediator mediator) {
super(mediator);
}
public void sendMessage(String message) {
mediator.notice(message, this);
}
public void getNotice(String message) {
System.out.println("少林寺收到消息:" + message);
}
}
具体的な中級クラス
//具体中介者类
public class Master extends Mediator {
private Wudang wudang;
private Emei emei;
private Shaolin shaolin;
public void setWudang(Wudang wudang) {
this.wudang = wudang;
}
public void setEmei(Emei emei) {
this.emei = emei;
}
public void setShaolin(Shaolin shaolin) {
this.shaolin = shaolin;
}
@Override
public void notice(String message, Collegue collegue) {
if (collegue == wudang) {
shaolin.getNotice(message);
} else if (collegue == emei) {
shaolin.getNotice(message);
} else if (collegue == shaolin) {
wudang.getNotice(message);
emei.getNotice(message);
}
}
}
使用する
public class Demo {
public static void main(String[] args) {
Master master = new Master();
Wudang wudang = new Wudang(master);
Emei emei = new Emei(master);
Shaolin shaolin = new Shaolin(master);
master.setWudang(wudang);
master.setEmei(emei);
master.setShaolin(shaolin);
wudang.sendMessage("武当弟子被少林所伤");
emei.sendMessge("峨眉弟子被少林所伤");
shaolin.sendMessage("误会,不可能,绝对不可能!");
}
}
少林寺收到消息:武当弟子被少林所伤
少林寺收到消息:峨眉弟子被少林所伤
武当派收到消息:误会,不可能,绝对不可能!
峨眉派收到消息:误会,不可能,绝对不可能!