程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Behavioral模式之Mediator模式

Behavioral模式之Mediator模式

編輯:關於C++

1.意圖

用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變他們之間的交互。

2.別名

3.動機

面向對象設計鼓勵將行為分布到各個對象中。這種分布可能會導致對象間有許多連接。在最壞的情況下,每一個對象都知道其他所有對象。

4.適用性

以下情況使用Mediator模式:

一組對象以定義良好但是復雜的方式進行通信。產生的相互依賴關系結構混亂且難以理解。 一個對象引用其他很多對象並且直接與這些對象通信,導致難以復用該對象。 想定制一個分布在多個類中的行為,而又不想生成太多的子類。

5.結構

中介者模式也是用來降低類類之間的耦合的,因為如果類類之間有依賴關系的話,不利於功能的拓展和維護,因為只要修改一個對象,其它關聯的對象都得進行修改。如果使用中介者模式,只需關心和Mediator類的關系,具體類類之間的關系及調度交給Mediator就行,這有點像spring容器的作用。先看看圖:
Mediator模式
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!

7.相關模式

Facade與中介者的不同之處在於它是對一個對象子系統進行抽象,從而提供了一個更為方便的接口。它的協議是單向的,即Facade對象對這個子系統類提出請求,但反之則不行。相反,Mediator提供了個Colleague對象不支持或不能支持的協作行為,而且協議是多向的。 Colleague可使用Observer模式與Mediator通信。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved