设计模式:简单的说就是设计模板。前人预先已经设计好的程序代码(模板),我们只要按照它的要求方式进行编码,就可以实现相应的功能。
作用:提供了一种模板,功能实现起来更加的简单。
------------代理(委托)------------
分类:单例,
代理/委托,
工厂,
kvc(key-value coding(键值编码)),
观察者(kvo(key-value observing(键值观察),通知),
MVC(model-view-controller(模型-视图-控制器)
代理:也叫委托
定义:A类有一件事情要做,但是自己不想做,让B类帮忙实现。(注意:B类不是固定的某个类,只要能帮我做这件事件的类都可以)
------ 实例:找房子
因素:我们 (Student)(A类)
帮我们找房子的人(代理/中介/第三人) (B类)
@protocol StudentDelegate <NSObject> 1、定义协议
-(void)findHouse;
@end
@interface Student :NSObject {
@property id<StudentDelegate>delegate; 2、声明一个遵循代理带对象 和 找代理的方法
}
-(void)findHelp;
@end
3、在主类中实现找代理的方法
-(void)findHelp{
//以后,如果给成员变量写了setter(set),getter(get)方法,就尽量使用点语法
//容错处理
if ([self.delegate respondsToSelector:@selector(findHouse)]) {
//任意对象找房子
[self.delegate performSelector:@selector(findHouse)];
}else{
NSLog(@"它不能给我找房子"); }}
4、被动类引进协议并饮用协议
#import "Student.h"
@interface Agency : NSObject<StudentDelegate>{
@property Student *student;
//代理类的工作
-(void)agencyWork;
@end
5、实现被动类的方法
-(void)agencyWork{
//创建学生类对象
self.student = [[Student alloc]init];
//通过self将代理类设置成student的delegate对象 *************
self.student.delegate = self;
//学生找帮助
[self.student findHelp]; }}
6、main中
Agency *myAgency = [[Agency alloc] init];
//代理去工作
[myAgency agencyWork];
---------------堆栈----------