几天没写设计模式的总结了,工作上要学的事情多,觉得写写挺麻烦。可是这几天下来发现没写总结后,新学的几个模式之间的区别都搞混淆了,看来做学问真的是没有捷径的。写吧!
先来看一个公司的部门关系
怎么样,由于各个部门之间都会有交互,是不是显得逻辑很混乱?可想而知,就算实现了,日后维护也是相当困难的。于是就有了中介者模式:
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单的说,就是一个星型拓扑图
抽象中介者类:
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个对象直接的相互依赖关系转换为中介者和同事类的依赖关系,同事类越多,中介者的逻辑就复杂。
一句话概括中介者模式:桥接模式+子类依赖关系!