首页 / 设计模式 / java设计模式--中介者模式
java设计模式--中介者模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java设计模式--中介者模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3754字,纯文字阅读大概需要6分钟。
内容图文
中介者模式
中介者模式是设计模式中的对象行为型模式,主要是通过一个中介对象来封装一系列对象的交互,这样使得各需要交互的对象不需要显示的互相引用,从而使得各对象的耦合松散,并且可以独立的改变他们的交互。
在面向对象的设计中,通常会把不同的行为分布到不同的对象中去,这样的设计就可以会导致每个对应都有其他对象的引用,也可以显式的调用其他各对象,那么如果我修改一个对象的行为,可能就会涉及到其他所有对象的修改,这样大大增加了工作量,不利于系统的维护。
中介者模式的适用性
-
系统中各对象存在复杂的引用关系,且整体结构混乱难以维护的情况下。
-
一个对象同时会引用其他很多个对象,导致该对象难以复用的情况下。
-
想通过一个中间类来封装其他多个类的行为,同时又不想生成很多个子类的情况下。
中介者模式的结构图
中介者模式一共包含4类角色:
1、抽象中介者角色(Mediator):抽象中介者定义一个接口,该接口用于提供个对象之间的通信。
2、具体中介者角色(ConcreteMediator):具体中介者实现抽象中介者定义的接口,并且保存需要该对象进行中介通信的各对象实例。
3、抽象同事角色(Colleague):保存对中介者对象的引用。
4、具体同事角色(ConcreteColleague):保存对中介者对象的引用,同时在需要与其他对象通信的时候,通过与中介者对象通信来完成。
中介者模式的示例
抽象中介者角色,定义统一的接口,方便各同事对象的通信
public interface Mediator { public void send(String message, Colleague colleague, String receiver); }
具体中介者角色,通过协调各同事角色的行为,同事包含各同事角色的引用,同时定义各同事类之间相互通信的逻辑,避免通信混乱。
public class ConcreteMediator implements Mediator { private ConcreteColleague1 concreteColleague1; private ConcreteColleague2 concreteColleague2; public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) { this.concreteColleague1 = concreteColleague1; } public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) { this.concreteColleague2 = concreteColleague2; } @Override public void send(String message, Colleague colleague, String receiver) { if (colleague == concreteColleague1) { if (receiver.equals("ConcreteColleague2")) { System.out.println("ConcreteColleague1给" + receiver + "发送消息" + message); } } else if (colleague == concreteColleague2) { if (receiver.equals("ConcreteColleague1")) { System.out.println("ConcreteColleague2给" + receiver + "发送消息" + message); } } } }
抽象同事角色
public abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } }
具体同事角色,即系统内需要相互通信的各对象
public class ConcreteColleague1 extends Colleague { public ConcreteColleague1(Mediator mediator) { super(mediator); } public void sendtoColleague2(){ String message="同事类1发送消息"; mediator.send(message,this,"ConcreteColleague2"); } }
public class ConcreteColleague2 extends Colleague { public ConcreteColleague2(Mediator mediator) { super(mediator); } public void sendtoColleague2(){ String message="同事类2发送消息"; mediator.send(message,this,"ConcreteColleague1"); } }
客户端演示
public class Client { public static void main(String[] args) { ConcreteMediator concreteMediator = new ConcreteMediator(); ConcreteColleague1 concreteColleague1 = new ConcreteColleague1(concreteMediator); ConcreteColleague2 concreteColleague2 = new ConcreteColleague2(concreteMediator); concreteMediator.setConcreteColleague1(concreteColleague1); concreteMediator.setConcreteColleague2(concreteColleague2); concreteColleague1.sendtoColleague2(); concreteColleague2.sendtoColleague2(); } } /* 执行结果: ConcreteColleague1给ConcreteColleague2发送消息同事类1发送消息 ConcreteColleague2给ConcreteColleague1发送消息同事类2发送消息 */
从以上示例中,可以看出各同事角色不再需要拥有需要通信对象的引用,降低了系统的耦合度,所有的通信逻辑都在中介者对象中完成,但是可以想象得到,如果一个通信系统中包含了许多个通信对象,那么中介者对象势必会非常复杂。所以在考虑使用中介者模式的时候虽然会简化通信对象的引用,但是也需要考虑中介者对象膨胀的问题。
内容总结
以上是互联网集市为您收集整理的java设计模式--中介者模式全部内容,希望文章能够帮你解决java设计模式--中介者模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。