Objective C 语言 中介者模式实现

Objective-C阿木 发布于 2025-06-30 13 次阅读


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

以下是一个简单的Objective-C中介者模式的实现:

1. 定义中介者接口

我们定义一个中介者接口,它将包含所有同事类需要调用的方法。

objc

@protocol Mediator <NSObject>

- (void)notify:(NSString )message colleague:(Colleague )colleague;

@end


2. 实现具体中介者

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

objc

@interface ConcreteMediator : NSObject <Mediator>

@property (strong, nonatomic) NSMutableArray colleagues;

- (instancetype)init;

@end

@implementation ConcreteMediator

- (instancetype)init {


self = [super init];


if (self) {


_colleagues = [[NSMutableArray alloc] init];


}


return self;


}

- (void)registerColleague:(Colleague )colleague {


[self.colleagues addObject:colleague];


}

- (void)notify:(NSString )message colleague:(Colleague )colleague {


for (Colleague c in self.colleagues) {


if (![c isEqual:colleague]) {


[c receiveMessage:message];


}


}


}

@end


3. 定义同事类接口

同事类需要实现一个接收消息的方法,以便在接收到中介者的通知时做出响应。

objc

@protocol Colleague <NSObject>

- (void)receiveMessage:(NSString )message;

@end


4. 实现具体同事类

我们创建两个具体的同事类,它们将实现同事类接口。

objc

@interface ColleagueA : NSObject <Colleague>

@property (weak, nonatomic) id<Mediator> mediator;

- (instancetype)initWithMediator:(id<Mediator>)mediator;

@end

@implementation ColleagueA

- (instancetype)initWithMediator:(id<Mediator>)mediator {


self = [super init];


if (self) {


_mediator = mediator;


}


return self;


}

- (void)receiveMessage:(NSString )message {


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


}

@end

@interface ColleagueB : NSObject <Colleague>

@property (weak, nonatomic) id<Mediator> mediator;

- (instancetype)initWithMediator:(id<Mediator>)mediator;

@end

@implementation ColleagueB

- (instancetype)initWithMediator:(id<Mediator>)mediator {


self = [super init];


if (self) {


_mediator = mediator;


}


return self;


}

- (void)receiveMessage:(NSString )message {


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


}

@end


5. 使用中介者模式

现在我们可以创建中介者实例,注册同事对象,并通过中介者发送消息。

objc

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


@autoreleasepool {


// 创建中介者


ConcreteMediator mediator = [[ConcreteMediator alloc] init];



// 创建同事对象


ColleagueA colleagueA = [[ColleagueA alloc] initWithMediator:mediator];


ColleagueB colleagueB = [[ColleagueB alloc] initWithMediator:mediator];



// 注册同事对象到中介者


[mediator registerColleague:colleagueA];


[mediator registerColleague:colleagueB];



// 通过中介者发送消息


[mediator notify:@"Hello from ColleagueA" colleague:colleagueA];


[mediator notify:@"Hello from ColleagueB" colleague:colleagueB];


}


return 0;


}


总结

在这个简单的示例中,我们创建了一个中介者模式,其中`ConcreteMediator`负责协调`ColleagueA`和`ColleagueB`之间的通信。通过中介者,我们可以轻松地添加新的同事类,而无需修改现有的同事类或中介者类,从而降低了类之间的耦合。

中介者模式在处理复杂对象之间的交互时非常有用,特别是在对象之间通信频繁且复杂的情况下。通过使用中介者,我们可以简化对象之间的通信,并提高系统的可维护性和可扩展性。