您的位置:首页 > 编程语言 > C语言/C++

黑马程序员-OC语言-多态、代理

2015-12-30 19:39 525 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

开场白:多态是C语言的概念,代理是OC的概念,多态作为面向对象三大特性之一,重要性可见一斑,代理也更不可小视。

为什么要把它们放到一起来说?因为我对它们在概念性和功能性上有点混淆。今天就把要它们说清楚了,解决这场纠纷!

多态:不同的对象以不同的方式响应相同名称方法的能力称为多态 (也就是一个方法有多种状态,多种状态体现在子类对父类方法重写中)

话说:有一个消防员(Fireman)类、一个医生(Doctor)类,都继承自人类(Person)

消防员类:save方法(灭火)

医生类:save方法(输液)

人类:在这代表上帝

@interface Person:NSObject
@end
@implementation Person
@end


@interface Fireman:Perosn
@end
@implementation Fireman
-(void) save;
@end


@interface Doctor:Person
@end
@implementation Doctor
-(void) save;
@end


Person *p1=[Doctor new];//Doctor是Person的子类
person *p2=[Fireman new];//Fireman是Person的子类
[(Doctor *)p1 save];
[(Fireman *)p2 save];


编译时,编译器会检查指针p1、p2的类型(Person)有没有这个方法,如果有,不报错;如果没有,报错。(强制类型转换会避过这一步)

运行时,会检查p1\p2指针的真正类型(Doctor、Fireman)有没有这个方法,如果有,不报错;如果没有,报错。

所有的强制类型转换都是临时的。

多态存在的意义:

简化了编程接口。类和类之间可以重用一些习惯性的命名。这样,编程接口就是一些抽象的行为的集合

代码扩展性和复用性更好。

方法多样性

高聚合性和低耦合性

代理:让别人代替你去做事,代替你完成任务的对象,就是你的代理。

协议:

@protocol LaunchProtocol <NSObject>
-(void) shoot;
@end


人类:

@interface Person : NSObject
@property(nonatomic,strong) id<LaunchProtocol> delegate;
-(void) launch;
@end

@implementation Person
{
NSLog(@"扣动扳机~~~");
if (self.delegate!=nil)
{
[self.delegate shoot];
}
}
@end


枪类:(遵守LaunchProtocol协议)

@interface cf : NSObject<LaunchProtocol>
@end

@implementation Gun
-(void) shoot
{
NSLog(@"biu  biu   11biu");
}
@end


main函数

Person *p=[Person new];
Gun *gun=[Gun new];
p.delegate=gun;
[p launch];//person类只有扣动扳机的方法,没有发射的方法,发射的方法就找到了枪去做。


代理存在的意义:

1.拓展了功能和方法

2.高聚合性和低耦合性

自己的一些思考:代理没有继承关系,通常A知道什么是什么时候做事,但不知道怎么做,而B知道怎么做却不知道什么时候做,让AB合作,在正确的时间做正确的事。

多态是多个子类相应一个方法,主要作用是:简化编程接口,提高代码扩展性。

都实现高聚合低耦合。

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多态 代理 OC