Java深入到一定程度,就不可避免的碰到設計模式這一概念,瞭解設計模式,將使自己對java中的介面或抽象類別應用有更深的理解.設計模式在java的中型系統中應用廣泛,遵循一定的編程模式,才能使自己的代碼便於理解,易於交流,Mediator(中介者模式)模式是比較常用的一個模式.
Mediator中介者模式,當多個對象彼此間都有聯絡的時候,我們就可以應用Mediator將對象間的多對多關係轉換為一對多的關係,這樣做,可以使各個對象間的耦合鬆散。統一管理對象間的互動。但也可能使得Mediator對象成為一個系統中的龐然大物,難以維護
使用情境:集中負責維護物件模型的關係完整性 以及需要封裝對象間互動方式的時候.
其實MVC中的controller就是一種Mediator,是UI層和後端應用sevice層間的中介者。中介者將互動的複雜性變為中介者的複雜性
在此寫了7個java類來描述說明Mediator設計模式的實現方式;
1、Colleague.java 互動對象的抽象類別
2、Colleague1.java 互動對象1
3、Colleague2.java 互動對象2
4、Colleague3.java 互動對象3
5、Mediator.java 中介者抽象類別
6、ConcreteMediator.java 具體的中介者
7、MediatorTest.java 帶有main方法的測試類別
=============== 1、Colleague.java
互動對象的抽象類別,定義了中介者的注入方法 、互動的行為方法
package mediator;
public abstract class Colleague {
//中介者
private Mediator mediator;
public Mediator getMediator() {
returnmediator;
}
public Colleague(Mediator m) {
mediator =m;
}
//訊息
private String message;
public String getMessage() {
returnmessage;
}
public void setMessage(String message) {
this.message= message;
}
//發送訊息
public abstract void sendMsg();
//收到訊息
public abstract void getMsg(String msg);
//發送訊息
public void sendMsg(String msg) {
this.message= msg;
mediator.action(this);
}
}
=============== 1 end
=============== 2、Colleague1.java
package mediator;
public class Colleague1 extends Colleague {
public Colleague1(Mediator m) {
super(m);
}
public void getMsg(String msg) {
System.out.println("Colleague1 has got themessage -'" + msg + "'");
}
public void sendMsg() {
System.out.println("Colleague1 has send the message '" +getMessage() + "'");
}
}
=============== 2 end
=============== 3、Colleague2.java
package mediator;
public class Colleague2 extends Colleague {
public Colleague2(Mediator m) {
super(m);
}
public void getMsg(String msg) {
System.out.println("Colleague2 has got themessage -'" + msg + "'");
}
public void sendMsg() {
System.out.println("Colleague2 has send the message '" +getMessage() + "'");
}
}
=============== 3 end
=============== 4、Colleague3.java
package mediator;
public class Colleague3 extends Colleague {
public Colleague3(Mediator m) {
super(m);
}
public void getMsg(String msg) {
System.out.println("Colleague3 has got themessage -'" + msg + "'");
}
public void sendMsg() {
System.out.println("Colleague3 has send the message '" +getMessage() + "'");
}
}
=============== 4 end
=============== 5、Mediator.java
package mediator;
abstract class Mediator {
//Mediator針對Colleague的一個互動行為
public abstract void action(Colleaguesender);
//加入Colleague對象
public abstract void addCollegue(Colleaguecolleague);
}
=============== 5 end
=============== 6、ConcreteMediator.java
具體的中介者,負責管理Colleague對象間的關係、以及Colleague對象間的互動
package mediator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteMediator extends Mediator {
privateList<Colleague> colleagues = newArrayList<Colleague>(0);
public void addCollegue(Colleague colleague){
colleagues.add(colleague);
}
public void action(Colleague actor) {
String msg =actor.getMessage();
//sendmsg
for(Colleague colleague : colleagues) {
if(colleague.equals(actor)){
colleague.sendMsg();
break;
}
}
//gotmsg
for(Colleague colleague : colleagues) {
if(colleague.equals(actor))
continue;
colleague.getMsg(msg);
}
}
}
=============== 6 end
=============== 7、MediatorTest.java
package mediator;
public class MediatorTest {
public static void main(String[] args){
//產生中介者並注入到各個Colleague對象中
Mediatormediator = new ConcreteMediator();
Colleaguecolleague1 = new Colleague1(mediator);
Colleaguecolleague2 = new Colleague2(mediator);
Colleaguecolleague3 = new Colleague3(mediator);
//註冊對象到中介
mediator.addCollegue(colleague1);
mediator.addCollegue(colleague2);
mediator.addCollegue(colleague3);
//Colleague1 觸發行為
colleague1.sendMsg("Hi,it's time to lunch. Let's go!");
System.out.println();
//Colleague2觸發行為
colleague2.sendMsg("Is anybody here!");
System.out.println();
//Colleague3觸發行為
colleague3.sendMsg("Wait!I will lunch off right away.");
System.out.println();
}
}
=============== 7 end