中介者模式(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