最精简的代理设计模式demo - 保姆看孩子

时间:2023-03-09 20:00:06
最精简的代理设计模式demo - 保姆看孩子

1,协议文件

@protocol NursePtotocol <NSObject>

//保姆的协议方法

- (void)startToAmuseBaby;

@end

2,管理类(使用类)

@interface Baby : NSObject

{ //1,定义实例变量,即谁遵守协议,是对象。也就是说:谁充当保姆角色。《定义》

id <NurseProtocol> delegate;

}

- (void)setDelegate:(id)newDelegate;

- (id)delegate;

- (void)crying;

@end

@implementation Baby

//设置访问方法

- (void)setDelegate:(id)newDelegate

{ delegate = newDelegate;//2,赋值代理。即:让谁当保姆。《赋值》}

- (id)delegate

{ return delegate;}

//孩子的行为方法(使用代理的方法)

- (void)crying

{ NSLog(@"孩子哭了");

//4,(管理类) 使用协议方法《使用》

[self.delegate startToAmuseBaby];

}

@end

3,充当代理类

@interface Women : NSObject

@end

@implementation Women

- (void)startToAmuseBaby

{//3,代理类,《实现》<委托方法,需要设计者手写代码的地方,也是苹果暴露出的委托方法(UI中常用)>

NSLog(@"保姆已经去看孩子了");}

@end

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

{

@autoreleasepool {

Baby *baby = [[Baby alloc] init];

Women *women = [[Women alloc] init];

//调用setter方法,赋值代理:让women遵从nurse协议

[baby setDelegate:women];

[baby crying];

}

return 0;

}