用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變他們之間的交互。
無
面向對象設計鼓勵將行為分布到各個對象中。這種分布可能會導致對象間有許多連接。在最壞的情況下,每一個對象都知道其他所有對象。
以下情況使用Mediator模式:
一組對象以定義良好但是復雜的方式進行通信。產生的相互依賴關系結構混亂且難以理解。 一個對象引用其他很多對象並且直接與這些對象通信,導致難以復用該對象。 想定制一個分布在多個類中的行為,而又不想生成太多的子類。中介者模式也是用來降低類類之間的耦合的,因為如果類類之間有依賴關系的話,不利於功能的拓展和維護,因為只要修改一個對象,其它關聯的對象都得進行修改。如果使用中介者模式,只需關心和Mediator類的關系,具體類類之間的關系及調度交給Mediator就行,這有點像spring容器的作用。先看看圖:
User類統一接口,User1和User2分別是不同的對象,二者之間有關聯,如果不采用中介者模式,則需要二者相互持有引用,這樣二者的耦合度很高,為了解耦,引入了Mediator類,提供統一接口,MyMediator為其實現類,裡面持有User1和User2的實例,用來實現對User1和User2的控制。這樣User1和User2兩個對象相互獨立,他們只需要保持好和MediatZ喎?/kf/ware/vc/" target="_blank" class="keylink">vctauvOS1xLnYz7W+zdDQo6zKo8/CtcTIq9PJTXlNZWRpYXRvcsDgwLTOrLuko6E8L3A+DQo8aDIgaWQ9"6代碼示例">6.代碼示例
實現代碼:
public interface Mediator {
public void createMediator();
public void workAll();
}
中介類
public class MyMediator implements Mediator {
private User user1;
private User user2;
public User getUser1() {
return user1;
}
public User getUser2() {
return user2;
}
@Override
public void createMediator() {
user1 = new User1(this);
user2 = new User2(this);
}
@Override
public void workAll() {
user1.work();
user2.work();
}
}
user類
public abstract class User {
private Mediator mediator;
public Mediator getMediator(){
return mediator;
}
public User(Mediator mediator) {
this.mediator = mediator;
}
public abstract void work();
}
public class User1 extends User {
public User1(Mediator mediator){
super(mediator);
}
@Override
public void work() {
System.out.println(user1 exe!);
}
}
public class User2 extends User {
public User2(Mediator mediator){
super(mediator);
}
@Override
public void work() {
System.out.println(user2 exe!);
}
}
測試類:
public class Test {
public static void main(String[] args) {
Mediator mediator = new MyMediator();
mediator.createMediator();
mediator.workAll();
}
}
輸出:
user1 exe!
user2 exe!