1. 程式人生 > >設計模式------中介者模式

設計模式------中介者模式

而且 作用 dos some 自己的 eth pan 沒有 self

中介者模式定義

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

Mediator抽象中介者角色

抽象中介者角色定義統一的接口,用於各同事角色之間的通信。

public abstract class Mediator{
    //定義同事類  
    protected ConcreteColleague1 c1;
    protected ConcreteColleague2 c2;    
    
    //通過getter/setter方法把同事類註入進來
    public ConcreteColleague1 getC1(){
        
return c1; } public void setC1(ConcreteColleague1 c1){ this.c1 = c1; } public ConcreteColleague2 getC2(){ return c2; } public void setC2(ConcreteColleague2 c2){ this.c2 = c2; } //中介者模式的業務邏輯 public abstract void doSomething1(); public
abstract void doSomething2(); }

Concrete Mediator 具體中介者角色

具體中介者角色通過協調各同事實現協作行為,因此它必須依賴於各個同事角色

public class ConcreteMediator extends Mediator{
    @Override
    public void doSomething1(){
        //調用同事類的方法,只要是public方法都可以調用
        super.c1.selfMethod1();
        super.c2.selfMethod2();
    }
    @Override
    
public void doSomething2(){ //調用同事類的方法,只要是public方法都可以調用 super.c1.selfMethod1(); super.c2.selfMethod2(); } }

Colleague同事角色

每一個同事角色都知道中介者角色,而且與其他的同事角色通信的時候,一定要通過中介者角色協作。每個同事類的行為分為兩種:一種是同事本身的行為,比如改變對象本身的狀態,處理自己的行為等,這種方法叫做自發行為,與其他的同事類或中介者沒有任何的依賴;第二種是必須依賴中介者才能完成的行為,叫做依賴方法。

抽象同事類

public abstract class Colleague{
    protected Mediator mediator;
    
    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }
}

具體同事類

public class ConcreteColleague1 extends Colleague{
    //通過構造函數傳遞中介者
    public ConcreteColleague1(Mediator mediator){
        super(mediator);
    }
    
    //自有方法 self-method
    public void depMethod1(){
        //處理自己的業務邏輯
    }
    
    //依賴方法 dep-method
    public void depMethod2(){
        //處理自己的業務邏輯
        //自己不能處理的業務邏輯,委托給中介者處理
        super.mediator.doSomething2();
    }
    
}

public class ConcreteColleague2 extends Colleague{
    //通過構造函數傳遞中介者
    public ConcreteColleague2(Mediator mediator){
        super(mediator);
    }
    
    //自有方法 self-method
    public void depMethod1(){
        //處理自己的業務邏輯
    }
    
    //依賴方法 dep-method
    public void depMethod2(){
        //處理自己的業務邏輯
        //自己不能處理的業務邏輯,委托給中介者處理
        super.mediator.doSomething2();
    }
    
}

中介者模式的缺點:中介者類會膨脹得很大,而且邏輯很復雜。

設計模式------中介者模式