博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中介者模式小记【原创】
阅读量:4480 次
发布时间:2019-06-08

本文共 1539 字,大约阅读时间需要 5 分钟。

几天没写设计模式的总结了,工作上要学的事情多,觉得写写挺麻烦。可是这几天下来发现没写总结后,新学的几个模式之间的区别都搞混淆了,看来做学问真的是没有捷径的。写吧!

先来看一个公司的部门关系

 

怎么样,由于各个部门之间都会有交互,是不是显得逻辑很混乱?可想而知,就算实现了,日后维护也是相当困难的。于是就有了中介者模式:

中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单的说,就是一个星型拓扑图

 

抽象中介者类:

public abstract class AbstractMediator {protected Purchase purchase;protected Sale sale;protected Stock stock;//构造函数public AbstractMediator(){purchase = new Purchase(this);sale = new Sale(this);stock = new Stock(this);}//中介者最重要的方法,叫做事件方法,处理多个对象之间的关系public abstract void execute(String str,Object...objects);}

抽象同事类:

public abstract class AbstractColleague {protected AbstractMediator mediator;public AbstractColleague(AbstractMediator _mediator){this.mediator = _mediator;}}

具体的中介者和具体的同事类就不贴出来了,无非是通过多态调用父类的方法。客户端有必要提一下:

public class Client {public static void main(String[] args) {AbstractMediator mediator = new Mediator();//采购人员采购电脑System.out.println("------采购人员采购电脑--------");Purchase purchase = new Purchase(mediator);purchase.buyIBMcomputer(100);//销售人员销售电脑System.out.println("\n------销售人员销售电脑--------");Sale sale = new Sale(mediator);sale.sellIBMComputer(1);//库房管理人员管理库存System.out.println("\n------库房管理人员清库处理--------");Stock stock = new Stock(mediator);stock.clearStock();}}

 

      我觉得这里有个比较重要的地方是,需要将中介者注入到每一个具体的同事类中,并且具体的中介者中也有各个同事类的对象,他们是相互关联的。

      中介者模式的优点就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖,同事类只依赖中介者,减少了依赖,当然也同时减低了类间的耦合。它的缺点呢就是中介者会膨胀的很大,而且逻辑会很复杂,因为所有的原本N个对象直接的相互依赖关系转换为中介者和同事类的依赖关系,同事类越多,中介者的逻辑就复杂。

      一句话概括中介者模式:桥接模式+子类依赖关系!

转载于:https://www.cnblogs.com/winkey4986/archive/2012/04/13/2445281.html

你可能感兴趣的文章
匿名内部类
查看>>
BZOJ4071: [APIO2015]八邻旁之桥
查看>>
Redis的六种特性 场景
查看>>
mysql 添加[取消]timestamp的自动更新
查看>>
码农的半衰期只有15年?
查看>>
手工释放linux内存
查看>>
2014-5-30 总结
查看>>
【H3 BPM工作流程管理产品小故事】第四篇 子表创建
查看>>
洛谷P1148 拱猪计分
查看>>
MySQL服务器的安装和配置,MySQL Workbench 8.0.12安装,MySQL的基本使用
查看>>
扑克序列
查看>>
java笔记--适配器模式的运用
查看>>
C#与数据结构--图的遍历
查看>>
ispy 编译笔记
查看>>
bzoj1067——SCOI2007降雨量(线段树,细节题)
查看>>
day 1
查看>>
洛谷P1282 多米诺骨牌【线性dp】
查看>>
数据类型的提升(promotion)
查看>>
Thead是不能返回值的,但是作为更高级的Task当然要弥补一下这个功能。
查看>>
Android呼叫转移跳转到拨号盘 “#”号显示不出来
查看>>