设计模式之Mediator
Mediator翻译为仲裁者,常用于图形编程中,有多个同事类相互状态依赖的场景.使用仲裁者模式可以解耦各个同事类间的交互等依赖.
Mediator模式是把同事类间的交互逻辑统一放到Mediator类中进行统一管理,把各个同事类的状态管理放在Mediator中,操作同事类后状态切换时,同事类通过上报更新的状态给Mediator进行决策,更新对应的其他同事类.
由于Mediator中需要控制同事类的状态切换,可以通过在ConcreteMediator中聚合各个同事类ConcreteColleage;同时,ConcreteColleage内部状态变化时,需要上报状态给Mediator,所以ConcreteColleage中聚合有Mediator的对象.
uml图:
主要模块
Mediator接口
Mediator接口主要提供createColleage和colleageChanged接口.
ConcreteMediator
在createColleage中创建concreateColleage等多个同事类,并且在colleageChanged
中实现业务逻辑,并控制各个子同事类的状态.
Colleage
Colleage中保存Mediator对象,提供controlColleage
方法,供mediator.colleageChanged调用.
ConcreteColleage
同事类实现,这里只列出了controlColleage
方法,内部应该还有同事类的内部状态等.在controlColleage中会修改同事类的内部状态,比如修改为只读,修改背景颜色等.
和State模式比较
在State模式中,每个状态是一个ConcreteState
类,状态变化是通过修改聚合的对象实现的,由于状态对象经常重新赋值,一般ConcreteState
可以使用单例实现.Mediator模式中,Colleage同事类一般会有多个,各个之间会有相互以来,通过Mediator统一管理.