協調多個物件之間的互動——中介者模式(三)
20.3 完整解決方案
為了協調介面元件物件之間的複雜互動關係,Sunny公司開發人員使用中介者模式來設計客戶資訊管理視窗,其結構示意圖如圖20-7所示:
圖20-7 引入了中介者類的“客戶資訊管理視窗”結構示意圖
圖20-7只是一個重構之後的結構示意圖,在具體實現時,為了確保系統具有更好的靈活性和可擴充套件性,我們需要定義抽象中介者和抽象元件類,其中抽象元件類是所有具體元件類的公共父類,完整類圖如圖20-8所示:
圖20-8 重構後的“客戶資訊管理視窗”結構圖
在圖20-8中,Component充當抽象同事類,Button、List、ComboBox和TextBox充當具體同事類,Mediator充當抽象中介者類,ConcreteMediator充當具體中介者類,ConcreteMediator維持了對具體同事類的引用,為了簡化ConcreteMediator類的程式碼,我們在其中只定義了一個Button物件和一個TextBox物件。完整程式碼如下所示:
//抽象中介者
abstract class Mediator {
public abstract void componentChanged(Component c);
}
//具體中介者
class ConcreteMediator extends Mediator {
//維持對各個同事物件的引用
public Button addButton;
public List list;
public TextBox userNameTextBox;
public ComboBox cb;
//封裝同事物件之間的互動
public void componentChanged(Component c) {
//單擊按鈕
if(c == addButton) {
System.out.println("--單擊增加按鈕--");
list.update();
cb.update();
userNameTextBox.update();
}
//從列表框選擇客戶
else if(c == list) {
System.out.println("--從列表框選擇客戶--");
cb.select();
userNameTextBox.setText();
}
//從組合框選擇客戶
else if(c == cb) {
System.out.println("--從組合框選擇客戶--");
cb.select();
userNameTextBox.setText();
}
}
}
//抽象元件類:抽象同事類
abstract class Component {
protected Mediator mediator;
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
//轉發呼叫
public void changed() {
mediator.componentChanged(this);
}
public abstract void update();
}
//按鈕類:具體同事類
class Button extends Component {
public void update() {
//按鈕不產生互動
}
}
//列表框類:具體同事類
class List extends Component {
public void update() {
System.out.println("列表框增加一項:張無忌。");
}
public void select() {
System.out.println("列表框選中項:小龍女。");
}
}
//組合框類:具體同事類
class ComboBox extends Component {
public void update() {
System.out.println("組合框增加一項:張無忌。");
}
public void select() {
System.out.println("組合框選中項:小龍女。");
}
}
//文字框類:具體同事類
class TextBox extends Component {
public void update() {
System.out.println("客戶資訊增加成功後文字框清空。");
}
public void setText() {
System.out.println("文字框顯示:小龍女。");
}
}
編寫如下客戶端測試程式碼:
class Client {
public static void main(String args[]) {
//定義中介者物件
ConcreteMediator mediator;
mediator = new ConcreteMediator();
//定義同事物件
Button addBT = new Button();
List list = new List();
ComboBox cb = new ComboBox();
TextBox userNameTB = new TextBox();
addBT.setMediator(mediator);
list.setMediator(mediator);
cb.setMediator(mediator);
userNameTB.setMediator(mediator);
mediator.addButton = addBT;
mediator.list = list;
mediator.cb = cb;
mediator.userNameTextBox = userNameTB;
addBT.changed();
System.out.println("-----------------------------");
list.changed();
}
}
編譯並執行程式,輸出結果如下:
--單擊增加按鈕-- 列表框增加一項:張無忌。 組合框增加一項:張無忌。 客戶資訊增加成功後文字框清空。 ----------------------------- --從列表框選擇客戶-- 組合框選中項:小龍女。 文字框顯示:小龍女。 |
【作者:劉偉 http://blog.csdn.net/lovelion】
相關文章
- 設計模式系列之中介者模式(Mediator Pattern)——協調多個物件之間的互動設計模式物件
- 物件間的聯動——觀察者模式(三)物件模式
- 中介者(調停者)模式模式
- (三)中介者模式模式
- 物件間的聯動——觀察者模式(六)物件模式
- 物件間的聯動——觀察者模式(五)物件模式
- 物件間的聯動——觀察者模式(四)物件模式
- 物件間的聯動——觀察者模式(二)物件模式
- 設計模式系列之「中介者模式」設計模式
- Python-物件之間互動——反恐精英(偽)Python物件
- 中介者模式模式
- JAVA設計模式之 中介者模式【Mediator Pattern】Java設計模式
- 軟體設計模式系列之十九——中介者模式設計模式
- Objective-C設計模式——中介者Mediator(物件去耦)Object設計模式物件
- Java進階篇設計模式之十 ---- 訪問者模式和中介者模式Java設計模式
- 我的Java設計模式-中介者模式Java設計模式
- JavaMediatorPattern(中介者模式)Java模式
- 中介者模式(Mediator Pattern)。模式
- 行為型模式:中介者模式模式
- 設計模式之中介者模式設計模式
- 設計模式(十四)中介者模式設計模式
- 設計模式(十一):中介者模式設計模式
- web與APP之間的互動—WebViewJavascriptBridgeAPPWebViewJavaScript
- swift之與h5之間的互動(一)SwiftH5
- Java設計模式之(三)——建造者模式Java設計模式
- 設計模式實戰 - 中介者模式設計模式
- 極簡設計模式-中介者模式設計模式
- Python設計模式-中介者模式Python設計模式
- PHP設計模式漫談之調解者模式PHP設計模式
- 設計模式之中介者設計模式
- 設計模式(十七)中介者設計模式
- ios開發-中介者模式iOS模式
- 設計模式之間互為陷阱的問題!為模式而模式的疑問!設計模式
- Java多執行緒之併發協作生產者消費者設計模式Java執行緒設計模式
- 設計模式之Mediator(中介者)這樣理解 對嗎?設計模式
- 複雜物件的組裝與建立——建造者模式(三)物件模式
- 設計模式的征途—22.中介者(Mediator)模式設計模式
- 設計模式-行為型模式-中介者模式設計模式