中介者模式(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`之间的通信。通过中介者,我们可以轻松地添加新的同事类,而无需修改现有的同事类或中介者类,从而降低了类之间的耦合。
中介者模式在处理复杂对象之间的交互时非常有用,特别是在对象之间通信频繁且复杂的情况下。通过使用中介者,我们可以简化对象之间的通信,并提高系统的可维护性和可扩展性。
Comments NOTHING