Objective C 语言 设计模式重构案例案例

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


Objective-C 设计模式重构案例:从简单到复杂

摘要:

设计模式是软件工程中解决常见问题的通用解决方案。在Objective-C编程中,设计模式可以帮助我们编写更加模块化、可复用和易于维护的代码。本文将通过一个简单的案例,逐步展示如何使用设计模式对Objective-C代码进行重构,从而提高代码质量。

一、

在软件开发过程中,我们经常会遇到一些重复性的问题,如对象创建、资源管理、消息传递等。设计模式正是为了解决这些问题而诞生的。Objective-C作为一门面向对象的编程语言,同样可以运用设计模式来提高代码质量。本文将通过一个实际案例,展示如何使用设计模式对Objective-C代码进行重构。

二、案例背景

假设我们正在开发一个简单的社交应用,其中包含用户、好友和消息等实体。用户可以添加好友、发送消息等操作。下面是一个简单的用户类实现:

objective-c

@interface User : NSObject

@property (nonatomic, strong) NSString name;


@property (nonatomic, strong) NSArray<User > friends;

- (void)addFriend:(User )user;


- (void)sendMessage:(NSString )message toFriend:(User )user;

@end

@implementation User

- (instancetype)initWithName:(NSString )name {


self = [super init];


if (self) {


_name = name;


_friends = @[];


}


return self;


}

- (void)addFriend:(User )user {


if (![self hasFriend:user]) {


[self.friends addObject:user];


[user addFriend:self];


}


}

- (BOOL)hasFriend:(User )user {


return [self.friends containsObject:user];


}

- (void)sendMessage:(NSString )message toFriend:(User )user {


NSLog(@"%@ sends message to %@", self.name, user.name);


}

@end


在这个简单的实现中,我们使用了属性和实例方法来表示用户的行为。这种实现方式存在一些问题,如代码重复、可扩展性差等。

三、设计模式重构

1. 单例模式

为了确保全局只有一个消息发送类,我们可以使用单例模式来重构消息发送功能。

objective-c

@interface MessageSender : NSObject

+ (instancetype)sharedInstance;

- (void)sendMessage:(NSString )message toFriend:(User )user;

@end

@implementation MessageSender

+ (instancetype)sharedInstance {


static MessageSender instance = nil;


static dispatch_once_t onceToken;


dispatch_once(&onceToken, ^{


instance = [[self alloc] init];


});


return instance;


}

- (void)sendMessage:(NSString )message toFriend:(User )user {


NSLog(@"%@ sends message to %@", self.name, user.name);


}

@end


2. 命令模式

为了实现消息发送的解耦,我们可以使用命令模式来重构消息发送功能。

objective-c

@interface MessageCommand : NSObject

@property (nonatomic, strong) User user;


@property (nonatomic, strong) NSString message;

- (instancetype)initWithUser:(User )user message:(NSString )message;

- (void)execute;

@end

@implementation MessageCommand

- (instancetype)initWithUser:(User )user message:(NSString )message {


self = [super init];


if (self) {


_user = user;


_message = message;


}


return self;


}

- (void)execute {


[self.user sendMessage:self.message toFriend:self.user];


}

@end


3. 观察者模式

为了实现好友关系的动态更新,我们可以使用观察者模式来重构好友管理功能。

objective-c

@interface User : NSObject <UserObserver>

@property (nonatomic, strong) NSArray<UserObserver > observers;

- (void)addFriend:(User )user;


- (void)removeFriend:(User )user;

@end

@implementation User

- (instancetype)initWithName:(NSString )name {


self = [super init];


if (self) {


_name = name;


_friends = @[];


_observers = @[];


}


return self;


}

- (void)addFriend:(User )user {


if (![self hasFriend:user]) {


[self.friends addObject:user];


[user addObserver:self];


[self notifyObservers];


}


}

- (void)removeFriend:(User )user {


[self.friends removeObject:user];


[user removeObserver:self];


[self notifyObservers];


}

- (void)notifyObservers {


for (UserObserver observer in self.observers) {


[observer friendChanged:self];


}


}

- (BOOL)hasFriend:(User )user {


return [self.friends containsObject:user];


}

@end

@protocol UserObserver <NSObject>

- (void)friendChanged:(User )user;

@end


四、总结

通过使用设计模式,我们对原始的Objective-C代码进行了重构,提高了代码的可读性、可维护性和可扩展性。在实际开发中,我们可以根据具体需求选择合适的设计模式,从而提高代码质量。

本文以一个简单的社交应用为例,展示了如何使用单例模式、命令模式和观察者模式对Objective-C代码进行重构。在实际项目中,我们可以根据具体场景选择合适的设计模式,以达到最佳的开发效果。