UML關(guān)系簡(jiǎn)單介紹
UML簡(jiǎn)單使用的介紹
創(chuàng)建型設(shè)計(jì)模式
Android設(shè)計(jì)模式-單例模式
Android設(shè)計(jì)模式-工廠模式
Android設(shè)計(jì)模式-抽象工廠模式
Android設(shè)計(jì)模式-建造者模式
Android設(shè)計(jì)模式-原型模式
結(jié)構(gòu)型設(shè)計(jì)模式
Android設(shè)計(jì)模式-代理模式
Android設(shè)計(jì)模式-裝飾模式
Android設(shè)計(jì)模式-適配器模式
Android設(shè)計(jì)模式-組合模式
Android設(shè)計(jì)模式-門(mén)面模式
Android設(shè)計(jì)模式-橋接模式
Android設(shè)計(jì)模式-享元模式
行為型設(shè)計(jì)模式
Android設(shè)計(jì)模式-策略模式
Android設(shè)計(jì)模式-命令模式
Android設(shè)計(jì)模式-責(zé)任鏈模式
Android設(shè)計(jì)模式-模版方法模式
Android設(shè)計(jì)模式-迭代器模式
Android設(shè)計(jì)模式-觀察者模式
Android設(shè)計(jì)模式-備忘錄模式
Android設(shè)計(jì)模式-中介者模式
Android設(shè)計(jì)模式-訪問(wèn)者模式
Android設(shè)計(jì)模式-狀態(tài)模式
Android設(shè)計(jì)模式-解釋器模式
1.定義
用一個(gè)中介者對(duì)象封裝一系列的對(duì)象交互铺根,中介者可以使各對(duì)象不需要顯示地相互作用宪躯,從而使其耦合松散,而且可以獨(dú)立的改變他們之間的交互位迂。
2.中介者模式UML圖
角色介紹
- Mediator 抽象中介者角色访雪,定義統(tǒng)一的接口,用于各同時(shí)角色之間的交互
- ConcreteMediator 具體中介者角色掂林,具體中介者角色通過(guò)協(xié)調(diào)同事角色實(shí)現(xiàn)交互臣缀,因此,必須持有同事角色的引用泻帮。
- Colleague 同事角色精置,每一個(gè)同事角色,都需要直到中介者角色锣杂,并且不同同事角色之間的交互通信脂倦,需要通過(guò)中介者角色進(jìn)行番宁。每個(gè)同事者角色,都有兩種行為赖阻,一種是自發(fā)行為蝶押,一種是依賴(lài)方法。自發(fā)行為表示不需要中介者角色可以自己完成相應(yīng)邏輯的方法火欧。依賴(lài)方法是指必須通過(guò)中介者才能完成的方法棋电。
3.簡(jiǎn)單實(shí)現(xiàn)
3.1抽象中介者角色
public abstract class Mediator {
private ConcreteColleague1 concreteColleague1;
private ConcreteColleague2 concreteColleague2;
public ConcreteColleague1 getConcreteColleague1() {
return concreteColleague1;
}
public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) {
this.concreteColleague1 = concreteColleague1;
}
public ConcreteColleague2 getConcreteColleague2() {
return concreteColleague2;
}
public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) {
this.concreteColleague2 = concreteColleague2;
}
public abstract void method1();
public abstract void method2();
}
3.2具體中介者角色
public class ConcreteMediator extends Mediator {
@Override
public void method1() {
super.getConcreteColleague1().doSelf();
super.getConcreteColleague2().doSelf();
}
@Override
public void method2() {
super.getConcreteColleague1().doSelf();
super.getConcreteColleague2().doSelf();
}
}
3.3同事角色
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
}
3.4具體同事角色
public class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
public void doSelf(){
/**
* 可以自己完成的操作
*/
System.out.println("具體同時(shí)角色1的自己方法————");
}
public void doDep(){
super.mediator.method1();
}
}
public class ConcreteColleague2 extends Colleague {
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
public void doSelf(){
/**
* 可以自己完成的操作
*/
System.out.println("具體同時(shí)角色2的自己方法————");
}
public void doDep(){
super.mediator.method2();
}
}
3.5客戶(hù)端調(diào)用
public class MyClass {
public static void main(String args[]) {
Mediator mediator=new ConcreteMediator();
ConcreteColleague1 colleague1=new ConcreteColleague1(mediator);
ConcreteColleague2 colleague2=new ConcreteColleague2(mediator);
mediator.setConcreteColleague1(colleague1);
mediator.setConcreteColleague2(colleague2);
colleague1.doDep();
}
}
打印結(jié)果
具體同時(shí)角色1的自己方法————
具體同時(shí)角色2的自己方法————
如例子中所寫(xiě),具體同事角色繼承自同事角色抽象類(lèi)苇侵,同事角色中傳入中介者角色進(jìn)行初始化赶盔,當(dāng)調(diào)用具體同事角色當(dāng)相應(yīng)方法時(shí),通過(guò)調(diào)用中介角色當(dāng)方法榆浓,完成不同具體同事角色間當(dāng)通信于未。
4.總結(jié)
優(yōu)點(diǎn)
- 中介者模式優(yōu)點(diǎn)就是減少了類(lèi)間當(dāng)依賴(lài),同時(shí)降低類(lèi)類(lèi)間當(dāng)耦合
缺點(diǎn)
- 中介者模式將原來(lái)一對(duì)多模式改為了中介者和同事類(lèi)的依賴(lài)哀军,同事類(lèi)越多的時(shí)候沉眶,中介者的邏輯就會(huì)越復(fù)雜。杉适。
在面向?qū)ο缶幊讨校粋€(gè)類(lèi)必然會(huì)和多個(gè)類(lèi)有聯(lián)系柳击,當(dāng)這種一對(duì)多的聯(lián)系過(guò)于復(fù)雜的時(shí)候猿推,可以考慮使用中介者模式來(lái)進(jìn)行解耦,但是不復(fù)雜的時(shí)候捌肴,使用中介者模式蹬叭,反而會(huì)看起來(lái)更麻煩。状知。秽五。具體程度看具體情況了