Objective C 语言 实现状态模式的状态类

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


摘要:状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。在Objective-C中,状态模式可以用来管理对象在不同状态下的行为,从而提高代码的可维护性和扩展性。本文将围绕Objective-C语言,详细探讨状态模式的状态类实现及其应用。

一、

在软件开发过程中,我们经常会遇到对象在不同状态下需要表现出不同行为的情况。例如,一个订单对象可能处于“待支付”、“已支付”、“已发货”等状态,每个状态对应着不同的操作。如果直接在订单类中实现这些行为,会导致代码冗余且难以维护。状态模式正是为了解决这类问题而设计的。

状态模式定义了对象的行为基于其内部状态,允许对象在状态改变时改变其行为。状态模式将每个可能的状态封装成单独的类,使对象可以在运行时根据状态切换行为。

二、状态模式的基本结构

状态模式包含以下基本角色:

1. Context(环境类):维护一个状态对象的引用,并定义一个获取当前状态的方法。

2. State(状态接口):定义所有可能的状态行为。

3. ConcreteState(具体状态类):实现状态接口,定义每个具体状态的行为。

三、Objective-C中状态模式的实现

以下是一个简单的订单状态模式的实现示例:

objective-c

// 状态接口


@protocol OrderState <NSObject>

- (void)processOrder:(Order )order;

@end

// 具体状态类:待支付状态


@interface PendingPaymentState : NSObject <OrderState>

@end

@implementation PendingPaymentState

- (void)processOrder:(Order )order {


// 处理待支付状态下的订单操作


NSLog(@"订单 %ld 处于待支付状态,执行支付操作...", (long)order.orderId);


}

@end

// 具体状态类:已支付状态


@interface PaidState : NSObject <OrderState>

@end

@implementation PaidState

- (void)processOrder:(Order )order {


// 处理已支付状态下的订单操作


NSLog(@"订单 %ld 处于已支付状态,执行发货操作...", (long)order.orderId);


}

@end

// 环境类


@interface Order : NSObject

@property (nonatomic, strong) OrderState state;

- (void)setState:(OrderState )state;

- (void)processOrder;

@end

@implementation Order

- (void)setState:(OrderState )state {


_state = state;


}

- (void)processOrder {


if (_state) {


_state->processOrder(self);


}


}

@end

// 使用状态模式


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


@autoreleasepool {


Order order = [[Order alloc] init];


PendingPaymentState pendingState = [[PendingPaymentState alloc] init];


PaidState paidState = [[PaidState alloc] init];

// 设置订单状态为待支付


order.state = pendingState;


[order processOrder]; // 输出:订单 1 处于待支付状态,执行支付操作...

// 设置订单状态为已支付


order.state = paidState;


[order processOrder]; // 输出:订单 1 处于已支付状态,执行发货操作...


}


return 0;


}


四、状态模式的应用场景

1. 对象在其生命周期中存在多种状态,并且每个状态都有不同的行为。

2. 对象的行为依赖于其内部状态,并且状态改变时行为也会随之改变。

3. 需要避免使用多个if-else语句来处理不同状态下的行为。

五、总结

本文介绍了Objective-C中状态模式的状态类实现及其应用。通过将每个可能的状态封装成单独的类,状态模式可以有效地管理对象在不同状态下的行为,提高代码的可维护性和扩展性。在实际开发中,我们可以根据具体需求灵活运用状态模式,解决对象状态管理问题。