23种设计模式(7):中介者模式-java开发java经验技巧

23种设计模式(7):中介者模式-java开发java经验技巧

ID:30749391

大小:209.00 KB

页数:7页

时间:2019-01-03

23种设计模式(7):中介者模式-java开发java经验技巧_第1页
23种设计模式(7):中介者模式-java开发java经验技巧_第2页
23种设计模式(7):中介者模式-java开发java经验技巧_第3页
23种设计模式(7):中介者模式-java开发java经验技巧_第4页
23种设计模式(7):中介者模式-java开发java经验技巧_第5页
资源描述:

《23种设计模式(7):中介者模式-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、23种设计模式(7):中介者模式-编程开发技术23种设计模式(7):中介者模式原文出处:卡奴达摩的专栏定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们Z间的交互。类型:行为类模式类图:中介者模式的结构中介者模式又称为调停者模式,从类图中看,共分为3部分:•抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类Z间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。•中介者实现类:从抽象中介者继承而來,实现抽象中介者中

2、定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。•同事类:如果一个对象会影响其他的对象,同时也会被其他对象彫响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们Z间和互影响,相互依赖。同事类越多,关系越复杂。并R,同事类也町以表现为继承了同一个抽彖类的一组实现组成。在中介者模式中,同事类之间必须通过屮介者才能进行消息传递。为什么要使用中介者模式一般來说,同事类Z间的关系是比较复杂的,多个同事类Z间互相关联时,他们Z间的

3、关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下图中,有六个同事类对象,假如对象1发生变化,那么将会冇4个对彖受到影响。如果对彖2发生变化,那么将会冇5个对彖受到影响。也就是说,同事类之间直接关联的设计是不好的。如果引入中介者模式,那么同事类之间的关系将变为星型结构,从图中可以看到,任何一个类的变动,只会影响的类水身,以及中介者,这样就减小了系统的耦合。一个好的设计,必定不会把所冇的对彖关系处理逻辑封装在本类中,而是使用一个专门的类来管理那些不属于自己的行为。

4、对象2我们使用一个例子來说明一下什么是同事类:有两个类A和B,类中各有一个数字,并且要保证类3中的数字永远是类A中数字的100倍。也就是说,当修改类A的数时,将这个数字乘以100赋给类B,而修改类B时,要将数除以100赋给类A。类A类B互和影响,就称为同事类。代码如2abstractclassAbstractColleague{protectedintnumber;publicintgetNumber(){returnnumber;}publicvoidsctNumbcr(intnumber){th

5、is,number=number;}//抽象方法,修改数字吋同吋修改关联对象publicabstractvoidsetNumber(intnumber,AbstractColleaguecoll);}classColleagueAextendsAbstractColleague{publicvoidsetNumber(intnumber,AbstractColleaguecoll){this.rmmber=number;coll.sctNumber(number*100);classColleagu

6、eBextendsAbstractColleague{publicvoidsctNumber(intnumber,AbstractColleaguecoll){this,number=number;coll.setNumber(number/100);}publicclassClient{publicstaticvoidmain(String[]args){AbstractCol1eaguecol1A=newColleagueAO;AbstractColleaguecollB二newColleagu

7、eBO;System,out.println(〃=========设置A影响B二二二二二二二二二二〃);collA.setNumber(1288,collB);System,out.println(〃col1A的number值:"+collA.getNumber());System,out.println(/zcollB的number值:/z+collB.getNumber());System,out.println(〃二二二二二二二二二二设置B影响A二二二二二二二二二二〃);collB.setNu

8、mber(87635,collA);System,out.println(/zcollB的number值:/z+collB.getNumber());System・out.println("collA的number值:,,+collA.getNumber());上面的代码中,类A类B通过直接的关联发生关系,假如我们要使用中介者模式,类A类B之间则不可以一直接关联,他们之间必须耍通过一个中介者来达到关联的目的。abstractclassAbstractCollcoguc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。