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);
        }
}

五、中介者模式的优缺点:

优点:

  • 通过中介者,让对象彼此解耦,增加对象的复用性
  • 通过将控制逻辑集中,可以简化系统维护
  • 通过中介者使一对多变成了一对一,便于理解

缺点:

  • 如果设计不好,引用中介者可能会使程序变复杂
  • 中介者承担过多责任,维护不好事情更加麻烦
发布了26 篇原创文章 · 获赞 17 · 访问量 2906

猜你喜欢

转载自blog.csdn.net/weixin_44789225/article/details/104513808
今日推荐