中介者模式:
定義一個物件來封裝一系列物件的互動.
中介者的四個角色:
1.Mediator(抽象中介者)
2.ConcreteMediator(具體中介者)
3.Colleague(抽象同事類)
4.ConcreteColleague(具體同事類)
舉例說明:
例如公司開發一套CRM系統,該系統負責編輯客戶的資訊,其中有一個UI界面負責顯示和修改客戶資訊.
該界面包括串列框,組合框,文本框,在這三個框內編輯用戶資訊,其他框內的資訊都要相應的改變.
具體實作:
/**
*
* @ClassName: Mediator
* @Description: 抽象中介者類
* @author haibiscuit
* @date 2019年10月22日 下午5:10:26
*
*/
public abstract class Mediator {
ArrayList<Mycomponent> arrayList;
protected void addMyComponent(Mycomponent c) {
if (null == arrayList) {
arrayList = new ArrayList<Mycomponent>();
}
arrayList.add(c);
};
public abstract void ComponentChanged(Mycomponent c);
}
/**
*
* @ClassName: ConcreteMediator
* @Description: 具體中介者類
* @author haibiscuit
* @date 2019年10月22日 下午5:11:41
*
*/
public class ConcreteMediator extends Mediator{
// 封裝同事物件的互動
@Override
public void ComponentChanged(Mycomponent c) {
for (Mycomponent mycomponent : arrayList) {
mycomponent.Update();
}
}
}
/**
*
* @ClassName: Mycomponent
* @Description: 抽象組件類,充當抽象同事類
* @author haibiscuit
* @date 2019年10月22日 下午5:07:02
*
*/
public abstract class Mycomponent {
protected Mediator mediator;
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
//轉發呼叫
public void changed() {
mediator.ComponentChanged(this);
}
public abstract void Update();
}
/**
*
* @ClassName: MyComboBox
* @Description: 組合框類,充當同事類
* @author haibiscuit
* @date 2019年10月22日 下午5:21:05
*
*/
public class MyComboBox extends Mycomponent{
@Override
public void Update() {
System.out.println("組合框修改資訊");
}
}
/**
*
* @ClassName: MyList
* @Description: 串列框類,充當具體同事
* @author haibiscuit
* @date 2019年10月22日 下午5:19:11
*
*/
public class MyList extends Mycomponent{
@Override
public void Update() {
System.out.println("串列框修改資訊");
}
}
/**
*
* @ClassName: MyTextBox
* @Description: 文本框類,充當同事類
* @author haibiscuit
* @date 2019年10月22日 下午5:19:45
*
*/
public class MyTextBox extends Mycomponent{
@Override
public void Update() {
System.out.println("文本框修改資訊");
}
}
總結:
中介者模式很像觀察者模式,具體的使用場景和比較可以參考觀察者模式.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/37791.html
標籤:設計模式
上一篇:對JDK動態代理的模擬實作
