网站设计公司有用吗,做淘宝联盟网站用数据库吗,分销是怎么做的,上海市住房和城乡建设网站中介者模式#xff08;Mediator Pattern#xff09; 中介者模式是一种行为型设计模式#xff0c;旨在通过封装一系列对象之间的交互方式#xff0c;使其能够独立地进行通信。 中介者模式的核心思想是将对象之间的直接通信改为通过一个中介者对象来进行间接通信#xff0c;…中介者模式Mediator Pattern 中介者模式是一种行为型设计模式旨在通过封装一系列对象之间的交互方式使其能够独立地进行通信。 中介者模式的核心思想是将对象之间的直接通信改为通过一个中介者对象来进行间接通信从而减少对象之间的耦合度。 在中介者模式中中介者Mediator对象充当了协调者的角色它负责控制和管理多个 colleague 对象之间的通信过程。 colleague 对象则相互依赖于中介者对象通过中介者来实现彼此之间的通信而不是直接交互。 以下是中介者模式的基本组成部分 Mediator中介者定义中介者接口通常包含用于协调 colleague 对象之间通信的方法。 ConcreteMediator具体中介者实现中介者接口具体实现协调 colleague 对象之间通信的逻辑。 Colleague同事定义同事对象的接口通常包含了被中介者调用的方法。 ConcreteColleague具体同事实现同事接口与其他同事对象进行通信并在需要时与中介者对象进行交互。 中介者模式的优点包括 减少了对象间的直接耦合增加了可维护性和灵活性。 通过集中管理对象间的通信简化了系统的设计和实现。 可以更方便地扩展和修改系统增加新的 colleague 对象或修改中介者逻辑。 然而中介者模式也存在一些缺点 中介者对象可能会变得复杂并承担过多的责任。 中介者模式在一定程度上违背了单一职责原则因为它需要处理大量 colleague 对象之间的通信逻辑。 中介者模式适用于同事之间存在复杂的关联关系且彼此之间的通信行为难以直接管理和维护的情况。 它可以帮助我们在系统中构建松耦合的对象间交互机制提高系统的可拓展性和可维护性。 提供demo版代码更容易理解
/*** author zhou* 中介者接口*/
interface Mediator {void sendMessage(String message, Colleague colleague);
}/*** author zhou* 具体中介者类*/
class ConcreteMediator implements Mediator {private Colleague colleague1;private Colleague colleague2;public void setColleague1(Colleague colleague1) {this.colleague1 colleague1;}public void setColleague2(Colleague colleague2) {this.colleague2 colleague2;}Overridepublic void sendMessage(String message, Colleague colleague) {if (colleague colleague1) {colleague2.receiveMessage(message);} else if (colleague colleague2) {colleague1.receiveMessage(message);}}
}/*** author zhou* 抽象同事类*/
abstract class Colleague {protected Mediator mediator;public Colleague(Mediator mediator) {this.mediator mediator;}public abstract void sendMessage(String message);public abstract void receiveMessage(String message);
}/*** author zhou* 具体同时类1*/
class ConcreteColleague1 extends Colleague {public ConcreteColleague1(Mediator mediator) {super(mediator);}Overridepublic void sendMessage(String message) {mediator.sendMessage(message, this);}Overridepublic void receiveMessage(String message) {System.out.println(ConcreteColleague1 received message: message);}
}/*** author zhou* 具体同时类2*/
class ConcreteColleague2 extends Colleague {public ConcreteColleague2(Mediator mediator) {super(mediator);}Overridepublic void sendMessage(String message) {mediator.sendMessage(message, this);}Overridepublic void receiveMessage(String message) {System.out.println(ConcreteColleague2 received message: message);}
}/*** author zhou* 客户端实现*/
public class MediatorPatternDemo {public static void main(String[] args) {ConcreteMediator mediator new ConcreteMediator();ConcreteColleague1 colleague1 new ConcreteColleague1(mediator);ConcreteColleague2 colleague2 new ConcreteColleague2(mediator);mediator.setColleague1(colleague1);mediator.setColleague2(colleague2);colleague1.sendMessage(Hello, colleague2!);colleague2.sendMessage(Hi, colleague1!);}
}中介者(Mediator)接口定义了消息的发送方法sendMessage具体中介者类(ConcreteMediator)实现了该接口 并通过引入两个具体同事类(ConcreteColleague1和ConcreteColleague2)来协调他们之间的信息交互。 每个具体同事类都持有中介者对象并实现了消息的发送(sendMessage)和接收(receiveMessage)方法。