IT铁人DAY 22-Mediator 中介者模式

  今天要介绍的模式Mediator,与上一篇Facade的结构有点雷同,不过Mediator是属於行为型模式,作用不太一样,现在就来了解Mediator在做甚麽以及与Facade的差异吧!


问题情境与解析

  Mediator Pattern强调的是各个独立的类别之间无法互相往来,而这些类别如有需要进行合作的话,就会由Mediator本身来协调类别与类别之间的运作,而这些类别只会依赖於一个Mediator,而不是耦合其他的类别。

  举个例子,飞机与飞机之间不会直接互相通信,他们只会与塔台交谈,给塔台相关的位置讯息,或是得到塔台提供的飞行资讯,使飞机与飞机的飞行路径不会有所冲突,而造成空难。倘若没有了中央塔台,飞行员就要先了解周围的每架飞机,并与他们讨论着飞行路径或是着陆的优先顺序等等,这样也许会造成飞机失事的机率大大提升。

  随着时间的推移,系统的类别只会越来越多,这些类别之间的往来也会变得越来越复杂,使得维护的成本越来越高。若碰到这种问题就可以用中介者模式来解决,它可以不让类别与类别之间互相通信,它们唯一的方法就是透过中介者来传递讯息。

Class Diagram

https://ithelp.ithome.com.tw/upload/images/20211007/20140743W69DVi4qr0.png

Skeleton Code

interface Mediator {
    public void notify(Component sender);
}

class ConcreteMediator implements Mediator {
    ComponentA componentA = new ComponentA();
    ComponentB componentB = new ComponentB();
    
    public void notify(Component sender) {
        if (sender == componentA) {
            reactOnA();
        } else {
            reactOnB();
        }
    }
    
    public void reactOnA() {
        // do something
    }
    
    public void reactOnB() {
        // do something
    }
}

interface Component {}

class ComponentA implements Component {
    private Mediator mediator;
    
    public void operation() {
        mediator.notify(this);
    }
}

class ComponentB implements Component {
    private Mediator mediator;
    
    public void operationB() {
        mediator.notify(this);
    }
}

  虽然使用Mediator就可以减少程序中各个类别之间的耦合,也能够更轻松的重用单一物件,但是要注意的是,Mediator可能会随着程序不断的更新,而进化成God Object。


除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章

lu23770127 - SASS 基础初学三十天

10u1 - 糟了!是世界奇观!

juck30808 - Python - 数位行销分析与 Youtube API 教学

SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?


<<:  Day 22 菜鸟的 helm 纪录 - 进阶篇

>>:  Day 24:霍夫曼编码(Huffman coding)

Day-16 动画效果 (二)

Transition 使用 昨天讲到元素的变形,而今天的 Transition 就是使用在元素改变时...

[Day21]C# 鸡础观念- 物件导向(oop)~类别(class)

万物皆有他的结构, 就如同世界上所有东西皆由元素所组成, 而定义这些结构在C#中称为class, 他...

30天打造品牌特色电商网站 Day.6 Figma实作第一个网站

今天带大家简单制作一张首页的画面。 导览列 选用Dektop(1440px X 1024px)的fr...

Gulp bower(1) DAY85

bower??? 什麽是 bower?? https://bower.io/ bower 为前端套...

Material UI in React [DAY 1] 简介

因为工作的关系,在专案上接触到Material UI的Framework,也让我理解到为什麽这套UI...