黑马程序员技术交流社区
标题:
OC---protocol代理设计模式---保姆和婴儿
[打印本页]
作者:
liii
时间:
2015-6-24 22:23
标题:
OC---protocol代理设计模式---保姆和婴儿
本帖最后由 liii 于 2015-6-24 22:57 编辑
/** 思路
1,需求方
* 定义协议
* 设置代理属性
* 调用代理方法
2,代理方
* 遵守协议
* 成为代理
* 实现代理方法
*/
/** lookAfterBabyProtocol.h
#import <Foundation/Foundation.h>
@class Baby; // 用@class 避免 Baby.h 和 lookAfterProtocol.h 文件循环引用
@protocol lookAfterBabyProtocol <NSObject> // (1-1 定义协议)
- (void)feedBaby:(Baby *)baby; // 喂小孩
- (void)hongBaby:(Baby *)baby; // 哄小孩睡觉
@end
*/
/** Baby.h
#import <Foundation/Foundation.h>
#import "lookAfterBabyProtocol.h"
#import "BaoMu.h"
@interface Baby : NSObject
@property (nonatomic, strong) id <lookAfterBabyProtocol> delegate; // 用于获取保姆对象 (2-2 设置代理属性)
@property (nonatomic, assign) int bloodValue; // 体力值
@property (nonatomic, assign) int sleepValue; // 睡眠值
- (void)eat; // 小孩饿了
- (void)sleep; // 小孩困了
@end
*/
/** Baby.m
#import "Baby.h"
@implementation Baby
- (void)eat{
NSLog(@"eat!!!, bloodValue = %d", self.bloodValue); // 小孩饿了,此时打印他的体力值
[self.delegate feedBaby:self]; // 当小孩饿了的时候,调用协议方法,让保姆喂小孩 (1-3 调用代理方法)
}
- (void)sleep{
NSLog(@"sleep!!!, sleepValue = %d", self.sleepValue); // 小孩困了,此时打印他的睡眠值
[self.delegate hongBaby:self]; // 当小孩困了的时候,调用协议方法,让保姆哄小孩睡觉 (1-3 调用代理方法)
}
@end
*/
/** BaoMu.h
#import <Foundation/Foundation.h>
#import "lookAfterBabyProtocol.h"
@interface BaoMu : NSObject <lookAfterBabyProtocol> // (2-1 遵守协议)
@end
*/
/** BaoMu.m
#import "BaoMu.h"
#import "Baby.h"
@implementation BaoMu
- (void)feedBaby:(Baby *)baby{ // (2-2-1 实现代理方法)
baby.bloodValue += 20; // 当喂完小孩后,体力值增加
NSLog(@"feedBabying, bloodValue = %d", baby.bloodValue); // 打印体力值
}
- (void)hongBaby:(Baby *)baby{ // (2-2-2 实现代理方法)
baby.sleepValue +=3; // 当小孩睡着后,睡眠值增加
NSLog(@"hongsleeping, sleepValue = %d", baby.sleepValue); // 打印睡眠值
}
@end
*/
/** main函数
#import <Foundation/Foundation.h>
#import "BaoMu.h"
#import "Baby.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
BaoMu *mm = [BaoMu new]; // 创建保姆
Baby *bb = [Baby new]; // 创建 baby
bb.bloodValue = 20; // 初始化体力值
bb.sleepValue = 3; // 初始化睡眠值
bb.delegate = mm; // 让小孩拥有一个保姆(2-3 成为代理)
[bb eat]; // 小孩饿了
[bb sleep]; // 小孩困了
}
return 0;
}
*/
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2