//利用协议实现代理模式的主要思路是:
//1)定义一个协议,里面声明代理类需要实现的方法列表,比如这里一个代理类需要实现speechForTeacher方法
//(2)创建一个代理类(Student)遵守上边的代理协议
//(3)在需要代理的类中(Teacher)定义一个对象,类型为id且遵守代理协议的成员变量(delegate)
// 4)在Teacher类中调用成员变量delegate(代理)的方法,调用代理类的方法。
// (5)main.m或其他使用Teacher类的文件中,为Teacher类的成员变量(代理类)赋值
main.m
#import <Foundation/Foundation.h>
#import "Student.h"
#import "Teacher.h"
#import "speechProtocol.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Teacher *teacher = [Teacher new];
Student *student = [Student new];
// (5)main.m或其他使用Teacher类的文件中,为Teacher类的成员变量(代理类)赋值,
teacher.delegate = student;
[teacher speech];
//代理类:LinkHome
//代理对象:delegate
//协议:speechProtocol
//协议的内容:speechForTeacher
}
return 0;
}
//Students.h
#import <Foundation/Foundation.h>
#import "speechProtocol.h"
//(2)创建一个代理类(Student)遵守上边的代理协议
@interface Student : NSObject<speechProtocol>
@end
//Students.m
#import "Student.h"
#import "speechProtocol.h"
@implementation Student
-(void)speechForTeacher{
NSLog(@"老师有事,我来代替老师来做个演讲");
}
@end
//Teacher.h
#import <Foundation/Foundation.h>
#import "speechProtocol.h"
@interface Teacher : NSObject
//(3)在需要代理的类中(Teacher)定义一个对象,类型为id且遵守代理协议的成员变量(delegate)
@property (nonatomic,strong) id<speechProtocol> delegate;
-(void)speech;
@end
//Teacher.m
#import "Teacher.h"
@implementation Teacher
-(void)speech{
NSLog(@"教师需要自己做一个演讲,但是该老师现在有事");
// (4)在Teacher类中调用成员变量delegate(代理)的方法,调用代理类的方法。
[self.delegate speechForTeacher];
}
@end
//speechProtocol.h
#import <Foundation/Foundation.h>
//1)定义一个协议,里面声明代理类需要实现的方法列表,比如这里一个代理类需要实现speechForTeacher方法
@protocol speechProtocol <NSObject>
-(void)speechForTeacher;
@end
如果有错误,请指正
既然都你来了,留下脚印再走吧{:3_53:}
|
|