做国珍新时代 网站,网站维护主要有哪些内容和方法,免费做游戏网站,网站建设外出考察报告目录
一、前言
二、中介者模式
三、总结 一、前言 中介者模式#xff08;Mediator Pattern#xff09;是一种行为型设计模式#xff0c;又成为调停者模式#xff0c;用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用#xff0c;从而使其耦合…目录
一、前言
二、中介者模式
三、总结 一、前言 中介者模式Mediator Pattern是一种行为型设计模式又成为调停者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用从而使其耦合松散而且可以独立的改变它们之间的交互。 中介者模式由以下角色组成 Mediator(中介者): 定义一个接口用于与各同事对象进行通信。这个接口主要用来协调各同事对象之间的交互 Concrete Mediator(具体中介者) 实现中介者接口并协调各同事对象之间的交互。具体中介者通常会持有对所有同事对象的引用并在这些对象之间进行调度和通信 Colleague(同事): 定义一个与中介者进行通信的接口。同事对象知道中介者对象并且所有的交互都通过中介者来进行 Concrete Colleague(具体同事) 实现同事接口具体同事通过中介者与其他同事对象进行交互而不是直接与其他同事对象通信 整个中介者模式的结构图 二、中介者模式 首先编写中介者抽象类Mediator.class:
public abstract class Mediator {public abstract void add(Colleague colleague);public abstract void operation(Colleague colleague, String message);} 编写具体的中介者类ConcreteMediator.class:
public class ConcreteMediator extends Mediator{private ListColleague colleagues new ArrayList();Overridepublic void add(Colleague colleague) {if (!colleagues.contains(colleague)) {colleagues.add(colleague);colleague.setMediator(this);}}Overridepublic void operation(Colleague colleague, String message) {for (Colleague coll : colleagues) {if (!coll.equals(colleague)) {coll.receive(message);}}}
}编写抽象同事类Colleague.class
public abstract class Colleague {protected Mediator mediator;public void setMediator(Mediator mediator) {this.mediator mediator;}public abstract void receive(String message);public abstract void send(String message);
}编写具体的同事类ConcreteColleagueOne.class、ConcreteColleagueTwo.class:
public class ConcreteColleagueOne extends Colleague{Overridepublic void receive(String message) {System.out.println(具体同事类 ConcreteColleagueOne 接收请求: message);}Overridepublic void send(String message) {System.out.println(具体同事类 ConcreteColleagueOne 发送请求: message);mediator.operation(this, message);}
}public class ConcreteColleagueTwo extends Colleague{Overridepublic void receive(String message) {System.out.println(具体同事类 ConcreteColleagueTwo 接收请求: message);}Overridepublic void send(String message) {System.out.println(具体同事类 ConcreteColleagueTwo 发送请求: message);mediator.operation(this, message);}
} 编写客户端类Client.class:
public class Client {public static void main(String[] args) {Mediator concreteMediator new ConcreteMediator();Colleague concreteColleague1 new ConcreteColleagueOne();Colleague concreteColleague2 new ConcreteColleagueTwo();concreteMediator.add(concreteColleague1);concreteMediator.add(concreteColleague2);concreteColleague1.send(Hello1);concreteColleague2.send(Hello2);}
}通过代码可以看出抽象同事类中拥有抽象中介者类每个具体的同事类中会调用抽象中介类的方法由具体的中介者实现。 代码测试结果 三、总结 优点与缺点 优点 降低耦合性 通过引入中介者对象同事对象不再需要显式地引用彼此。它们只需要与中介者对象通信从而降低了对象之间的耦合度使得代码更易于维护和扩展 集中控制 中介者模式将对象之间的交互逻辑集中到一个中介者对象中简化了对象的管理和协调便于修改和扩展交互逻辑。 提高可读性和可维护性 将复杂的对象交互逻辑从对象本身中提取出来放到中介者中使得每个对象的职责更加单一代码更清晰更易于理解和维护。 灵活性和扩展性 通过改变或扩展中介者对象可以很方便地改变或扩展系统的交互行为而不需要修改各个同事对象 缺点 复杂性增加 引入了一个新的中介者对象增加了系统的复杂性。中介者对象本身可能会变得复杂因为它需要处理所有的交互逻辑 可能导致性能问题 如果中介者对象处理了大量的交互逻辑可能会成为性能瓶颈因为所有的交互都需要通过中介者来处理。 难以维护 随着系统的规模扩大中介者对象的逻辑可能变得过于复杂难以维护。中介者本身可能会变成一个“上帝对象”负责太多的职责。 应用场景 GUI框架 在图形用户界面GUI中中介者模式常用于处理各个组件如按钮、文本框、复选框等之间的交互。例如一个表单中多个输入字段之间的相互启用/禁用状态的管理 聊天室应用 在即时通讯应用中中介者模式可以用来处理用户之间的消息传递。聊天室服务器可以作为中介者负责接收消息并分发给其他用户 航空交通管制 航空交通管制员作为中介者负责协调不同飞机之间的通信和导航确保它们安全地在空域中飞行 模块化系统 在模块化软件系统中不同模块之间的通信可以通过中介者模式来实现从而使得各个模块可以独立开发和维护 工作流引擎 在业务流程管理BPM系统中中介者模式可以用于协调不同步骤和任务之间的交互确保按照预定的流程顺序执行