首页 > 其他分享 >中介者模式

中介者模式

时间:2024-09-17 15:15:47浏览次数:8  
标签:mediator void Mediator 模式 中介 组件 public

中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,用于减少多个对象或类之间复杂的交互依赖。通过引入一个中介者对象,所有对象之间的通信不再直接进行,而是通过中介者来协调和管理,从而降低对象之间的耦合度。这使得系统更易于扩展和维护,因为对象之间的关系可以通过修改中介者来管理,而不必修改各个对象自身。

中介者模式的关键角色

  1. 中介者(Mediator): 定义组件之间通信的接口,负责管理和协调各个组件的交互。
  2. 具体中介者(Concrete Mediator): 实现中介者接口,包含所有组件的引用,并负责具体的组件之间的通信逻辑。
  3. 组件(Component): 组件是那些需要通信的对象,它们通过中介者来传递消息,而不与其他组件直接通信。

代码示例

以下是一个实现中介者模式的Java代码示例:

// 抽象组件类,所有组件都通过中介者进行通信
abstract class Component {
    protected Mediator mediator;

    public Component(Mediator mediator) {
        this.mediator = mediator;
    }

    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }
}

// 具体组件1
class Component1 extends Component {
    public Component1(Mediator mediator) {
        super(mediator);
    }

    public void doA() {
        System.out.println("组件1执行A操作。");
        mediator.notify(this, "A");
    }

    public void doC() {
        System.out.println("组件1执行C操作。");
    }
}

// 具体组件2
class Component2 extends Component {
    public Component2(Mediator mediator) {
        super(mediator);
    }

    public void doB() {
        System.out.println("组件2执行B操作。");
        mediator.notify(this, "B");
    }

    public void doC() {
        System.out.println("组件2执行C操作。");
    }
}

// 中介者接口,定义组件之间的通信方式
interface Mediator {
    void notify(Component sender, String event);
}

// 具体中介者类,负责管理各组件之间的交互
class ConcreteMediator implements Mediator {
    private Component1 component1;
    private Component2 component2;

    public void setComponent1(Component1 component1) {
        this.component1 = component1;
    }

    public void setComponent2(Component2 component2) {
        this.component2 = component2;
    }

    @Override
    public void notify(Component sender, String event) {
        if ("A".equals(event)) {
            System.out.print("中介者对A作出反应,并触发以下操作:");
            component2.doC();
        } else if ("B".equals(event)) {
            System.out.print("中介者对B作出反应,并触发以下操作:");
            component1.doC();
        }
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();

        Component1 component1 = new Component1(mediator);
        Component2 component2 = new Component2(mediator);

        mediator.setComponent1(component1);
        mediator.setComponent2(component2);

        System.out.println("客户端触发组件1的A操作:");
        component1.doA();

        System.out.println("\n客户端触发组件2的B操作:");
        component2.doB();
    }
}

运行结果

java复制代码客户端触发组件1的A操作:
组件1执行A操作。
中介者对A作出反应,并触发以下操作:组件2执行C操作。

客户端触发组件2的B操作:
组件2执行B操作。
中介者对B作出反应,并触发以下操作:组件1执行C操作。

代码解释

  • Component1Component2 是两个组件,它们并不直接相互通信,而是通过一个中介者(ConcreteMediator)来管理它们之间的交互。
  • ConcreteMediator 持有组件的引用,并且负责在接收到事件时,决定哪一个组件应该执行相应的操作。
  • Component1 执行 doA() 方法时,它会通知中介者,中介者接收到消息后,会让 Component2 执行 doC() 操作。同理,当 Component2 执行 doB() 时,中介者会让 Component1 执行 doC()

优点

  1. 降低耦合:各组件不再相互依赖,而是通过中介者进行通信,降低了类之间的耦合度。
  2. 提高可维护性:系统的变化集中在中介者中处理,组件的变化不会影响其他组件的实现,便于系统的扩展和维护。

缺点

  1. 复杂性增加:随着组件数量的增加,中介者的逻辑可能会变得复杂,可能导致中介者本身变得难以维护。

适用场景

  1. 系统中多个对象之间的复杂交互。
  2. 需要集中控制交互逻辑时。
  3. 对象间的通信难以维护或频繁变化时。

标签:mediator,void,Mediator,模式,中介,组件,public
From: https://www.cnblogs.com/20lxj666/p/18396280

相关文章

  • 迭代器模式
    迭代器模式迭代器模式(IteratorPattern)是一种行为设计模式,旨在提供一种方法顺序访问一个聚合对象(如列表、集合)中的各个元素,而无需暴露其内部表示。这种模式的核心是将遍历行为封装在迭代器对象中,使得客户端代码可以统一地处理不同类型的集合或容器。主要角色迭代器接口(Iterato......
  • 解释器模式
    解释器模式解释器模式(InterpreterPattern)是一种行为设计模式,它定义了一种用于解释和执行语言或表达式的语法表示方法。该模式的主要目的是让语言的语法易于扩展和修改。解释器模式的结构解释器模式通常由以下几个部分组成:抽象表达式(AbstractExpression):定义一个解释操作的接......
  • 观察者模式
    观察者模式观察者模式(ObserverPattern)是一种设计模式,用于建立对象之间的一对多依赖关系。这种模式使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现事件处理系统或消息通知系统。在观察者模式中,有两个主要角色:被观察者(Subject......
  • 访问者模式
    访问者模式“访问者模式”通常是指软件开发中的一种设计模式,也叫做“Visitor模式”。它属于行为型设计模式之一,主要用于将数据结构和操作解耦。通过使用访问者模式,可以在不修改数据结构的前提下,定义新的操作。访问者模式的基本思想是:你有一个包含不同对象的对象结构(例如一个元素......
  • 模板方法模式
    模板方法模式模板方法模式(TemplateMethodPattern)是一种行为设计模式,它定义了一个算法的骨架,并允许子类在不改变算法结构的情况下重写算法的某些步骤。通过这种模式,能够复用算法的整体流程,同时又能够灵活调整某些具体步骤的实现。模板方法模式的关键要素抽象类(AbstractClass......
  • 策略模式
    策略模式策略模式(StrategyPattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换。这种模式允许算法在不影响客户端的情况下变化,从而提高了代码的灵活性和可维护性。策略模式的组成策略模式由以下几个部分组成:抽象策略(Strategy):这是一个接口或抽象......
  • 命令模式
    命令模式命令模式(CommandPattern)是行为型设计模式之一,它将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,以及对请求排队或记录请求日志等操作。通过使用命令模式,命令的发出者与命令的执行者可以完全解耦。命令模式的结构Command(命令接口/抽象类):定义了执行命令......
  • 责任链模式
    责任链模式责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这个模式将请求的处理者连接成一条链,沿着这条链传递请求,直到某个处理者处理它为止。责任链模式的主要角色:抽象处理者(Handler):定......
  • 简单工厂模式
    简单工厂模式简单工厂模式(SimpleFactoryPattern)是一种创建型设计模式,通过一个工厂类来决定实例化哪一个类的对象。它是最常见的设计模式之一,主要用于将对象的创建与使用分离,减少代码重复,提高代码的可维护性。特点工厂角色:负责创建具体产品类的实例,通常是一个包含静态方法的......
  • 单列模式
    单列模式“单例模式(SingletonPattern),用于确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这个模式在需要控制资源的访问或者确保某些操作只有一个实例时使用。单例模式的特点唯一性:保证一个类只有一个实例。全局访问:提供一个全局的访问点来获取这个实例。延迟......