中介者模式(Mediator)

中介者模式git

一. 中介者模式

1.1 定義

  • 用一箇中介者對象封裝一系列的對象交互,中介者使各對象不須要顯示的相互做用,從而使耦合鬆散,並且能夠獨立的改變他們之間的交互.

1.2 角色

  • 抽象中介者類(AbstractMediator).
  • 具體中介者實現類(Mediator).
  • 同事類(Colleague).

二. 具體實現

2.1 建立抽象中介者對象

public abstract class AbstractMediator {
        private ColleagueA colleagueA;
        private ColleagueB colleagueB;
        public abstract void executeToA();
        public abstract void executeToB();
        public void setColleagueA(ColleagueA colleagueA) {
            this.colleagueA = colleagueA;
        }
        public void setColleagueB(ColleagueB colleagueB) {
            this.colleagueB = colleagueB;
        }
    }

2.2 建立具體中介者對象

public class Mediator extends AbstractMediator {
        public void executeToA() {
            System.out.println("Mediator executeToA ...");
        }
        public void executeToB() {
            System.out.println("Mediator executeToB ...");
        }
    }

2.3 建立同事類

public class ColleagueA {
        private AbstractMediator mediator;
        public ColleagueA(AbstractMediator mediator){
            this.mediator = mediator;
        }
        public void print(){
            System.out.println("ColleagueA print ... ");
            mediator.executeToB();
        }
    }
    public class ColleagueB {
        private AbstractMediator mediator;
        public ColleagueB(AbstractMediator mediator){
            this.mediator = mediator;
        }
        public void print(){
            System.out.println("ColleagueB print ...");
            mediator.executeToA();
        }
    }

2.4 調用

public static void main(String[] args) {
        AbstractMediator mediator = new Mediator();
        ColleagueA colleagueA = new ColleagueA(mediator);
        ColleagueB colleagueB = new ColleagueB(mediator);
        mediator.setColleagueA(colleagueA);
        mediator.setColleagueB(colleagueB);
        colleagueA.print();
        colleagueB.print();
    }

2.5 輸出

ColleagueA print ... 
    Mediator executeToB ...
    ColleagueB print ...
    Mediator executeToA ...

三. 優缺點

3.1 優勢

  • 各個同事類之間的解耦.
  • 下降類的複雜度.

3.2 缺點

  • 同事類過多會使中介者龐大,難以維護.

四. 源碼

https://github.com/Seasons20/DisignPattern.git

ENDgithub

相關文章
相關標籤/搜索