Objective C 语言 应用自定义中介者模式扩展

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


摘要:

中介者模式是一种行为设计模式,它通过引入一个中介对象来降低多个对象之间的耦合度,使得对象之间不需要显式地相互引用,从而简化了对象之间的通信。本文将围绕Objective-C语言,探讨如何应用和扩展中介者模式,以实现更灵活和高效的代码设计。

一、中介者模式简介

中介者模式的核心思想是:用一个中介对象来封装一系列的对象交互,使得对象之间不需要显式地相互引用,从而降低对象之间的耦合度。中介者模式通常包含以下角色:

1. 中介者(Mediator):负责协调各个对象之间的交互,持有所有对象引用。

2. 发起者(Colleague):与中介者通信,发送或接收消息。

3. 接收者(Colleague):接收来自中介者的消息,并作出响应。

二、Objective-C 中中介者模式的应用

以下是一个简单的Objective-C中介者模式示例,用于管理两个同事对象之间的通信。

objc

// Mediator.h


@interface Mediator : NSObject

- (void)send:(NSString )message to:(Colleague )colleague;

@end

// Mediator.m


@interface Mediator ()

@property (nonatomic, strong) Colleague colleague1;


@property (nonatomic, strong) Colleague colleague2;

@end

@implementation Mediator

- (instancetype)init {


self = [super init];


if (self) {


_colleague1 = [[Colleague alloc] initWithName:@"Colleague 1"];


_colleague2 = [[Colleague alloc] initWithName:@"Colleague 2"];


}


return self;


}

- (void)send:(NSString )message to:(Colleague )colleague {


[colleague receive:message from:self];


}

@end

// Colleague.h


@interface Colleague : NSObject

@property (nonatomic, strong) NSString name;


@property (nonatomic, strong) Mediator mediator;

- (instancetype)initWithName:(NSString )name;

- (void)receive:(NSString )message from:(Mediator )mediator;

@end

// Colleague.m


@implementation Colleague

- (instancetype)initWithName:(NSString )name {


self = [super init];


if (self) {


_name = name;


_mediator = [[Mediator alloc] init];


}


return self;


}

- (void)receive:(NSString )message from:(Mediator )mediator {


NSLog(@"%@ received message: %@", self.name, message);


}

@end

// 使用中介者模式


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


@autoreleasepool {


Mediator mediator = [[Mediator alloc] init];


Colleague colleague1 = [[Colleague alloc] initWithName:@"Colleague 1"];


Colleague colleague2 = [[Colleague alloc] initWithName:@"Colleague 2"];



[mediator send:@"Hello" to:colleague1];


[mediator send:@"Hi" to:colleague2];


}


return 0;


}


在这个例子中,`Mediator` 类作为中介者,负责转发消息给相应的同事对象。`Colleague` 类作为发起者或接收者,通过中介者发送或接收消息。

三、中介者模式的扩展

1. 多中介者模式

在某些情况下,一个系统可能需要多个中介者来管理不同类型的对象。可以通过创建多个中介者类来实现多中介者模式。

2. 动态中介者模式

动态中介者模式允许在运行时动态地添加或删除中介者。这可以通过使用运行时框架如Runtime来实现。

3. 事件驱动中介者模式

在事件驱动的系统中,中介者可以作为一个事件监听器,当某个事件发生时,中介者可以通知所有注册的对象。

以下是一个动态中介者模式的示例:

objc

// DynamicMediator.h


@interface DynamicMediator : NSObject

- (void)registerColleague:(Colleague )colleague;


- (void)unregisterColleague:(Colleague )colleague;


- (void)send:(NSString )message to:(Colleague )colleague;

@end

// DynamicMediator.m


@interface DynamicMediator ()

@property (nonatomic, strong) NSMutableArray<Colleague > colleagues;

@end

@implementation DynamicMediator

- (instancetype)init {


self = [super init];


if (self) {


_colleagues = [NSMutableArray array];


}


return self;


}

- (void)registerColleague:(Colleague )colleague {


[self.colleagues addObject:colleague];


}

- (void)unregisterColleague:(Colleague )colleague {


[self.colleagues removeObject:colleague];


}

- (void)send:(NSString )message to:(Colleague )colleague {


for (Colleague c in self.colleagues) {


if (c != colleague) {


[c receive:message from:self];


}


}


}

@end


在这个例子中,`DynamicMediator` 类允许动态地注册和注销同事对象,从而实现更灵活的中介者模式。

四、总结

中介者模式在Objective-C中的应用可以有效地降低对象之间的耦合度,提高代码的可维护性和可扩展性。通过扩展中介者模式,我们可以实现更复杂和灵活的通信机制。在实际项目中,根据具体需求选择合适的中介者模式及其扩展,可以带来更好的开发体验和系统性能。