简说中介者模式
2018-02-23 10:27
113 查看
设计模式之中介者模式
定义
调停者模式(中介者模式)是软件设计模式的一种,用于模块间解耦,通过避免对象互相显式的指向对方从而降低耦合。—— [ 百度百科 ]解释说明
在中介者模式中,中介者的存在,主要是为了处理对象与对象之间复杂的关系。如果对象与对象之间的关联关系由自身去维护,那么当对象数量庞大的时候,他们之间的关系势必形成错综复杂的网状结构,这无疑增加了代码的复杂度以及理解上的难度。所以,就需要中介者的出现,讲对象与对象之间的联动关系交由中介者处理,大大的减轻了对象自身的代码复杂度。代码块
//中介者模式 public class Test { //抽象中介者 abstract class AbstractMediator{ public People man; public People women; public void manDo(int age) { } public void womenDo(int age) { } } //具体实现中介者 class MediatorA extends AbstractMediator{ public MediatorA(People man, People women){ this.man = man; this.women = women; } @Override public void manDo(int age) { man.setAge(age + 5); } @Override public void womenDo(int age) { women.setAge(age - 5); } } //人 class People{ public int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } } //男人 class Man extends People{ public void setAge(int age, AbstractMediator mediator) { this.age = age; mediator.womenDo(age); } } //女人 class Women extends People{ public void setAge(int age, AbstractMediator mediator) { this.age = age; mediator.manDo(age); } } //测试 public static void main(String[] args) { Man man = new Test().new Man(); Women women = new Test().new Women(); AbstractMediator mediatorA = new Test().new MediatorA(man, women); man.setAge(30, mediatorA); System.out.println("男人年龄:" + man.getAge() + "女人年龄:" + women.getAge()); women.setAge(40, mediatorA); System.out.println("男人年龄:" + man.getAge() + "女人年龄:" + women.getAge()); } }
: 以上就是中介者模式的完整代码。首先,我们抽象出中介者父类,在其中定义了相互关系的对象,并且声明了对象之间发生变化的时候需要作出反应的方法manDo,womenDo,子类则是实现这两个方法。在上述代码中男人和女人之间的关系是:男人的年龄总是比女人的大5岁,于是当男人年龄变化时,相应的女人的年龄也发生变化,反之亦然。
总结
优点降低了类的复杂度,将一对多转化成了一对一。
各个类之间的解耦。
符合迪米特原则。
缺点
中介者会庞大,变得复杂难以维护。
试用场景
系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
相关文章推荐
- 设计模式及各大原则简介
- 设计模式学习--(1)
- android MVP 模式介绍与实战
- 保护模式下 中断处理程序的过程
- linux内核对S3C2410睡眠模式的支持
- Java设计模式之中介者模式
- 全栈JavaScript之路( 二十二 )IE 专有扩展——文档模式
- 单例模式全面学习
- JAVA_单例设计模式
- 设计模式—抽象工厂模式
- [置顶] Muduo网络库源码分析之Reactor模式的关键结构
- 用算法自动匹配简历与职位,iPeople 要革新传统招聘模式
- 【设计模式】全局观之为什么分三大类
- TypeScript设计模式之门面、适配器
- 关于设计模式
- 设计模式之适配器模式
- 创建类模式3--抽象工厂模式
- 深入浅出命令模式