大学网站群建设方案,网页设计是什么岗位,东莞网站公司星鑫,购物网站开发案例下载中介者模式
1.中介者模式含义
中介者模式#xff0c;就是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用#xff0c;从而使其耦合松散#xff0c;而且可以独立的改变它们之间的交互。
其实中介者模式很简单的#xff0c;就像它的名字一样就是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用从而使其耦合松散而且可以独立的改变它们之间的交互。
其实中介者模式很简单的就像它的名字一样中介调用某个类的某些方法的时候我们不直接去跟那个类的实例交互而是通过一个中间类—中介类进行交互这样的模式就叫中介者模式。
2.代码示例
下面通过一个代码示例讲解一下中介者模式
2.1UnitedNations联合国抽象类
UnitedNations是联合国抽象类定义一个抽象的declare方法
public abstract class UnitedNations {public abstract void declare(String message, Country country);
}2.2Country国家抽象类
Country是国家抽象类定义了一个内部的UnitedNations属性
public class Country {protected UnitedNations mediator;public Country(UnitedNations mediator) {this.mediator mediator;}
}2.3USA类
USA类是Country的具体实现类
public class USA extends Country{public USA(UnitedNations mediator) {super(mediator);}public void declare(String message){mediator.declare(message, this);}public void getMessage(String message){System.out.println(美国得到消息 message);}
}2.4Iraq类
Iraq类是Country的具体实现类
public class Iraq extends Country{public Iraq(UnitedNations mediator) {super(mediator);}public void declare(String message){mediator.declare(message, this);}public void getMessage(String message) {System.out.println(伊拉克得到消息 message);}
}2.5 UnitedNationsSecurityCouncil类
UnitedNationsSecurityCouncil类是UnitedNations的具体实现类
public class UnitedNationsSecurityCouncil extends UnitedNations{private USA usa;private Iraq iraq;public void setUsa(USA usa) {this.usa usa;}public void setIraq(Iraq iraq) {this.iraq iraq;}Overridepublic void declare(String message, Country country) {if (country usa) {iraq.getMessage(message);} else {usa.getMessage(message);}}
}2.6测试类
public class MainApp {public static void main(String[] args) {UnitedNationsSecurityCouncil unsc new UnitedNationsSecurityCouncil();USA usa new USA(unsc);Iraq iraq new Iraq(unsc);unsc.setUsa(usa);unsc.setIraq(iraq);usa.declare(给我石油我就不打你);iraq.declare(你不打我就给你石油);}
}运行结果 伊拉克得到消息给我石油我就不打你 美国得到消息你不打我就给你石油 从示例代码可以看出usa调用了自己的declare方法想给iraq发信息但是其实usa没有直接调用iraq的getMessage方法而是通过调用UnitedNations这个中介来转发消息usa将消息发给中介中介再将消息转发给iraq。
iraq给usa发消息也是同理
3.总结
通过示例代码能看出中介者模式是什么但是为什么要使用中介者模式呢我直接调用目标类的方法不是一样的吗
其实中介者模式的出现减少了各个类互相调用之间的耦合性使得可以独立地改变和复用各个独立的类。比如具体Country的子类改变并不会影响到调用它的那个类。并且由于把对象间如何协作进行了抽象将中介作为一个独立的概念并将其封装在一个对象中这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来也就是站在一个更宏观的角度去看待系统。
由于中介者类控制了集中化于是就把交互复杂性变为了中介者的复杂性这就使得中介者会比任何一个独立的类对象都复杂。
虽然中介者模式使得各个独立对象解耦了但是中介者对象自己却变得异常复杂它需要知道所有具体的要相互调用的类的信息这样中介者类的职责就又变得很多添加新的对象后也会要修改中介者类。
所以当系统中出现多对多的复杂交互的对象群的时候不要急着使用中介者模式先看看系统设计是否合理最后再考虑是不是使用中介者模式不然盲目使用中介者模式会适得其反增加系统复杂性。