State(状态模式)
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
比如AFN2.0的自定义Operation,有一个状态机转换规则,不同的状态下,有不同的属性设置。
VC.m
//HCDWork对象指定不同的状态,writeProgrem会有不同的处理结果。
HCDWork *work = [[HCDWork alloc]init];
[work writeProgram];
work.state = [[HCDAfternoonState alloc]init];
[work writeProgram];
work.state = [[HCDEventState alloc]init];
[work writeProgram];
work.state = [[HCDSleepState alloc]init];
[work writeProgram];
HCDState.h
@protocol HCDState <NSObject>
-(void)writeProgram:(HCDWork *)work;
@end
HCDWork.h
@interface HCDWork : NSObject
@property(nonatomic,strong)id<HCDState> state;
@property(nonatomic,assign)CGFloat hour;
@property(nonatomic,assign)BOOL finished;
-(void)writeProgram;
@end
HCDWork.m
@implementation HCDWork
-(instancetype)init{
self = [super init];
if (self) {
self.state = [[HCDForenoonState alloc]init];
}
return self;
}
-(void)writeProgram{
[self.state writeProgram:self];
}
@end
HCDAfternoonState.h
@interface HCDAfternoonState : NSObject<HCDState>
@end
HCDAfternoonState.m
@implementation HCDAfternoonState
-(void)writeProgram:(HCDWork *)work{
if (work.hour < 17) {
NSLog(@"当前时间:{%.f}点,下午状态还不错,继续努力", work.hour);
} else {
work.state = [[HCDEventState alloc] init];
[work writeProgram];
}
}
@end