Objective C 语言 实现中介者模式的事件路由

Objective-C阿木 发布于 2025-06-29 10 次阅读


中介者模式(Mediator Pattern)是一种行为设计模式,它定义了一个对象来封装一组对象之间的交互,使得对象之间不需要显式地相互引用,从而降低它们之间的耦合。在Objective-C中实现中介者模式,我们可以创建一个中介者类,它负责管理多个同事类(Colleague)之间的通信。

以下是一个简单的Objective-C中介者模式实现,我们将围绕事件路由这一主题进行展开。

文章概要

1.

2. 中介者模式概述

3. Objective-C中的中介者模式实现

- 定义中介者接口

- 实现具体中介者

- 定义同事类接口

- 实现具体同事类

- 事件路由示例

4. 代码示例

5. 总结

1.

在软件设计中,中介者模式是一种常用的模式,它可以帮助我们简化对象之间的交互,特别是在对象数量较多且交互复杂的情况下。在Objective-C中,我们可以通过定义中介者接口和同事类接口来实现中介者模式。

2. 中介者模式概述

中介者模式的核心思想是引入一个中介者对象,它负责协调多个同事对象之间的交互。这样,同事对象之间不需要直接通信,而是通过中介者来进行通信。这种模式的主要优点包括:

- 降低同事类之间的耦合度

- 增加系统的灵活性

- 易于扩展

3. Objective-C中的中介者模式实现

3.1 定义中介者接口

我们需要定义一个中介者接口,它将包含一个方法来注册同事对象,以及一个方法来通知所有同事对象某个事件的发生。

objc

@protocol Mediator <NSObject>

- (void)registerColleague:(Colleague )colleague;


- (void)notifyColleague:(Colleague )colleague withEvent:(NSString )event;

@end


3.2 实现具体中介者

接下来,我们实现一个具体的中介者类,它将维护一个同事对象列表,并实现注册和通知方法。

objc

@interface ConcreteMediator : NSObject <Mediator>

@property (strong, nonatomic) NSMutableArray colleagues;

- (void)registerColleague:(Colleague )colleague;


- (void)notifyColleague:(Colleague )colleague withEvent:(NSString )event;

@end

@implementation ConcreteMediator

- (void)registerColleague:(Colleague )colleague {


if (![self.colleagues containsObject:colleague]) {


[self.colleagues addObject:colleague];


}


}

- (void)notifyColleague:(Colleague )colleague withEvent:(NSString )event {


for (Colleague c in self.colleagues) {


if (![c isEqual:colleague]) {


[c receiveEvent:event];


}


}


}

@end


3.3 定义同事类接口

同事类接口定义了同事对象接收事件的方法。

objc

@protocol Colleague <NSObject>

- (void)receiveEvent:(NSString )event;

@end


3.4 实现具体同事类

接下来,我们实现两个具体的同事类,它们将实现同事类接口,并定义接收事件的方法。

objc

@interface ColleagueA : NSObject <Colleague>

@property (strong, nonatomic) ConcreteMediator mediator;

- (void)receiveEvent:(NSString )event;

@end

@implementation ColleagueA

- (void)receiveEvent:(NSString )event {


NSLog(@"ColleagueA received event: %@", event);


}

- (void)registerWithMediator:(ConcreteMediator )mediator {


self.mediator = mediator;


[mediator registerColleague:self];


}

@end

@interface ColleagueB : NSObject <Colleague>

@property (strong, nonatomic) ConcreteMediator mediator;

- (void)receiveEvent:(NSString )event;

@end

@implementation ColleagueB

- (void)receiveEvent:(NSString )event {


NSLog(@"ColleagueB received event: %@", event);


}

- (void)registerWithMediator:(ConcreteMediator )mediator {


self.mediator = mediator;


[mediator registerColleague:self];


}

@end


3.5 事件路由示例

我们创建一个事件路由示例,展示如何使用中介者来路由事件。

objc

int main(int argc, const char argv[]) {


@autoreleasepool {


ConcreteMediator mediator = [[ConcreteMediator alloc] init];


ColleagueA colleagueA = [[ColleagueA alloc] init];


ColleagueB colleagueB = [[ColleagueB alloc] init];

[colleagueA registerWithMediator:mediator];


[colleagueB registerWithMediator:mediator];

[mediator notifyColleague:colleagueA withEvent:@"Event A"];


[mediator notifyColleague:colleagueB withEvent:@"Event B"];


}


return 0;


}


4. 代码示例

以上代码展示了如何在Objective-C中实现中介者模式,并使用它来路由事件。

5. 总结

中介者模式在Objective-C中的应用可以帮助我们简化对象之间的交互,降低耦合度,并提高系统的灵活性。通过定义中介者接口和同事类接口,我们可以轻松地实现事件路由,从而使得系统更加模块化和易于维护。