世界上並沒有完美的程序,但是我們並不因此而沮喪,因爲寫程序就是一個不斷追求完美的過程。
- 意圖
定義一個對象,封裝一組對象的交互,降低對象之間的耦合度,對象之間無需顯示引用,並且可以單獨改變對象的交互方式。 - 類圖
- 實例
// 對象間通信形式
interface Mediator{
void sendMessage(String message);
String receiveMessage();
}
class MediatorImpl1 implements Mediator{
private String message;
@Override
public void sendMessage(String message) {
this.message = message;
}
@Override
public String receiveMessage() {
return message;
}
}
// 聊天室形式
class SimpleMediator{
public static void showMessage(Me me, String message){
System.out.println(me.getName() + " send " + message);
}
}
class Me{
private String name;
private String message;
// 發送消息通過Mediator解耦合
public void sendMessage(){
SimpleMediator.showMessage(this, message);
}
public void sendMessage1(Mediator mediator){
mediator.sendMessage(message);
System.out.println("send : " + message);
}
public void receiveMessage1(Mediator mediator){
String re = mediator.receiveMessage();
System.out.println("re : " + re);
}
public static Me create(){
return new Me();
}
public String getName() {
return name;
}
public Me setName(String name) {
this.name = name;
return this;
}
public String getMessage() {
return message;
}
public Me setMessage(String message) {
this.message = message;
return this;
}
}
- 測試
class MediatorTest{
public static void main(String[] args) {
Me me1 = Me.create().setName("h1").setMessage("hello m2");
Me me2 = Me.create().setName("h2").setMessage("hello m1");
System.out.println("第一種 --- ");
me1.sendMessage();
me2.sendMessage();
System.out.println("第二種 --- ");
MediatorImpl1 mediatorImpl1 = new MediatorImpl1();
System.out.println("me1 發送:");
me1.sendMessage1(mediatorImpl1);
System.out.println("me2 接收:");
me2.receiveMessage1(mediatorImpl1);
}
}
運行結果:
第一種 ---
h1 send hello m2
h2 send hello m1
第二種 ---
me1 發送:
send : hello m2
me2 接收:
re : hello m2