黑马程序员技术交流社区
标题:
oc代理模式
[打印本页]
作者:
clinging
时间:
2016-4-27 11:37
标题:
oc代理模式
创建三个类,分别为(Animal,Dog,Person),其中Person和Dog需要继承Animal类
要求:
a:创建Animal类:必有属性:体重(单位是Kg)
b:创建Dog类:必有属性:状态(枚举类型:健康和生病两种状态)
c:创建Person类:必有属性:姓名
d:根据以下描述设计一套代理模式:实现一个照顾小狗的协议(protocol):当小狗的状态为生病的时候,小狗需要人类的照顾,让其状态变成健康
作者:
13673696542
时间:
2016-4-29 20:15
#import <Foundation/Foundation.h>
// 定义一个枚举
typedef NS_ENUM(NSInteger,Status){
Health, // 健康
sick // 生病
};
#pragma mark - 声明和实现一个动物类
@interface Animal : NSObject
// 体重
@property(nonatomic,assign)CGFloat wheight;
@end
@implementation Animal
@end
// 声明照顾狗的代理协议
@protocol DogDelegate <NSObject>
// 照顾小狗的方法
-(void)changeDogStutus;
@end
#pragma mark - 声明和实现一个狗类
@interface Dog : Animal
// 小狗生病或健康的属性
@property(nonatomic,assign)Status status;
// 照顾小狗的代理协议
@property(nonatomic,weak)id<DogDelegate> delegate;
@end
@implementation Dog
@end
#pragma mark - 声明和实现一个人的类
@interface Person : Animal<DogDelegate>
// 人的名字
@property(nonatomic,copy)NSString * name;
// 人有一个宠物的属性
@property(nonatomic,strong)Dog * myDog;
@end
@implementation Person
// 实现代理协议的方法
-(void)changeDogStutus{
// 将狗的状态设置为健康
self.myDog.status = Health;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 初始化对象
Dog * smallDog = [[Dog alloc] init];
Person * onePerson = [[Person alloc] init];
// 设置对象的属性值
smallDog.wheight = 30;
smallDog.delegate = onePerson;
onePerson.name = @"小张";
onePerson.myDog = smallDog;
// 让小狗生病
smallDog.status = sick;
// 打印出小狗的状态
switch (smallDog.status) {
case 0:
NSLog(@"小狗现在病好了");
break;
case 1:
NSLog(@"小狗现在生病了");
break;
default:
NSLog(@"小狗现在是求知状态");
break;
}
// 调用小狗的代理方法(照顾小狗)
[smallDog.delegate changeDogStutus];
// 打印出小狗的状态
switch (smallDog.status) {
case 0:
NSLog(@"小狗现在病好了");
break;
case 1:
NSLog(@"小狗现在生病了");
break;
default:
NSLog(@"小狗现在是求知状态");
break;
}
}
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2