GOF23之中介者模式

一、核心作用:

  1. 如果一個系統中對象那個之間的聯繫呈現爲網狀結構,對象存在大量多對多的關係,將導致關係及其複雜,這些對象稱爲“同事對象”
  2. 我們可以引入一箇中介者對象,使各同事對象只跟中介者對象打交道,將複雜的網絡結構化解爲星狀結構,解耦多個同事對象之間的交互關係
  3. 每個對象都持有中介者對象的引用,只跟中介者對象打交道,通過中介者對象統一管理這些交互關係

二、常見應用場景:

  • MVC模式(C爲中介者對象,MV與他打交道)
  • 圖形界面開發GUI,多個組件交互,引入中介者

三、中介者模式的實現:

  1. 抽象中介者(mediator):定義一個接口用於和對象通信
  2. 具體中介者(concreteMediator):協調各同時對象實現寫作,維護各個同事
  3. 抽象同事角色(colleague):規定了同事的基本類型
  4. 具體同事角色(concreteColleague):每個同事都知道中介者
    在這裏插入圖片描述

四、代碼示例:

一、抽象中介者類:
package com.hezeu.mediator;

/**
* @Classname Mediator
* @Description 抽象中介者
* @Date 2020/2/26 上午 12:31
* @Created by 朱進博 [email protected]
*/
public interface Mediator {
        void register(String dname,Department department);
        void command(String dname);
}
二、具體中介者類:
package com.hezeu.mediator;

import java.util.HashMap;
import java.util.Map;

/**
* @Classname President
* @Description 具體中介者類
* @Date 2020/2/26 上午 12:47
* @Created by 朱進博 [email protected]
*/
public class President implements Mediator {
        private Map<String,Department> map = new HashMap<>();

        @Override
        public void register(String dname, Department department) {
                map.put(dname,department);
        }

        @Override
        public void command(String dname) {
                map.get(dname).selfAction();
        }
}

三、抽象同事類:
package com.hezeu.mediator;

/**
* @Classname Department
* @Description 同事類接口
* @Date 2020/2/26 上午 12:33
* @Created by 朱進博 [email protected]
*/
public interface Department {
        void selfAction(); //本不笨要做的事情
        void outAction(); //向總經理髮出的申請
}

四、具體同事類
package com.hezeu.iterator;

import java.util.ArrayList;
import java.util.List;

/**
* @Classname ConcreteAggregate
* @Description TODO
* @Date 2020/2/25 下午 07:34
* @Created by 朱進博 [email protected]
*/
public class ConcreteAggregate implements Aggregate{
        private List<Object> list = new ArrayList<>();

        public void addObject(Object obj) {
                this.list.add(obj);
        }

        public void removeObject(Object obj) {
                this.list.remove(obj);
        }

        public List<Object> getList() {
                return list;
        }

        public void setList(List<Object> list) {
                this.list = list;
        }

        public MyInteger createIterator() {
                return new ConcreteIterator(list);
        }
}

五、中介者模式的優缺點:

優點:

  • 通過中介者,讓對象彼此解耦,增加對象的複用性
  • 通過將控制邏輯集中,可以簡化系統維護
  • 通過中介者使一對多變成了一對一,便於理解

缺點:

  • 如果設計不好,引用中介者可能會使程序變複雜
  • 中介者承擔過多責任,維護不好事情更加麻煩
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章