OC中的代理设计模式
2015-07-22 13:48
351 查看
1,代理模式的概念
传入的对象,代替当前的类完成了某个功能,我们称之为代理模式。在OC中,代理设计模式是经常遇到的一种设计模式。
2,实现代理设计模式思路和步骤
1,定义一个协议(写在外面或者里面随便)并声明代理类需要实现的方法列表。
2,创建一个代理类,并遵守上面的协议。
3,在需要被代理的类中定义一个对象类型为ID并且遵守代理协议的成员变量。
4,在被代理的类中调用上面的成员变量_delegate(代理)的方法,调用代理类的方法。
5,在需要使用代理的地方为被代理的类的成员变量赋值。
3,代理设计模式的用处
1,可以用来监听,代理可以监听被代理的一些行为并实现相应的方法。
2,可以用来通知,被代理的类发生了一些行为,可以第一时间通知代理。
3,代处理,当被代理对象无法完成某些行为时,可以委托代理来完成。
4,事例程序
今天,我突然有急事,更新不了blog,但是我很想更新,于是我想我的代理CSDN帮我发blog。
传入的对象,代替当前的类完成了某个功能,我们称之为代理模式。在OC中,代理设计模式是经常遇到的一种设计模式。
2,实现代理设计模式思路和步骤
1,定义一个协议(写在外面或者里面随便)并声明代理类需要实现的方法列表。
2,创建一个代理类,并遵守上面的协议。
3,在需要被代理的类中定义一个对象类型为ID并且遵守代理协议的成员变量。
4,在被代理的类中调用上面的成员变量_delegate(代理)的方法,调用代理类的方法。
5,在需要使用代理的地方为被代理的类的成员变量赋值。
3,代理设计模式的用处
1,可以用来监听,代理可以监听被代理的一些行为并实现相应的方法。
2,可以用来通知,被代理的类发生了一些行为,可以第一时间通知代理。
3,代处理,当被代理对象无法完成某些行为时,可以委托代理来完成。
4,事例程序
今天,我突然有急事,更新不了blog,但是我很想更新,于是我想我的代理CSDN帮我发blog。
// // Yuzee.h // // Created by on 15/7/22. // Copyright (c) 2015年 All rights reserved. // #import <Foundation/Foundation.h> //2,于是我定义了一个协议,声明了一个可以发博客的blog方法。 @protocol YuzeeProtocol <NSObject> - (void)blog; @end //1,首先我创建一个Yuzee的类,代表我。并且我有一个Thinkblog的方法,代表我想发blog,但是我没有发blog的方法。 @interface Yuzee : NSObject //定义一个对象类型为id且遵守协议的成员变量delegate(固定写法) @property (nonatomic , weak) id<YuzeeProtocol> delegate; - (void)Thinkblog; @end
// // CSDN.m // // Created by on 15/7/22. // Copyright (c) 2015年 All rights reserved. // #import "CSDN.h" #import "Yuzee.h" //3,接着我又创建了一个代理类名字为CSDN,并且使我的代理遵守协议 @interface CSDN () <YuzeeProtocol> @end @implementation CSDN //4,我的代理CSDN遵守了我的协议,也就拥有了协议中的方法名,于是在代理中写上实现功能的代码。 - (void)blog{ NSLog(@"CSDN正在代理发博客......"); } @end
// // Yuzee.m // // Created by on 15/7/22. // Copyright (c) 2015年 All rights reserved. // #import "Yuzee.h" @implementation Yuzee //5,当我实现了想发博客的功能时,会通知代理。 - (void)Thinkblog{ NSLog(@"Yuzee想发博客......"); //6,就可以调用代理的blog方法代替我发blog [self.delegate blog]; } @end
// // main.m // 发博客-代理模式 // // Created by on 15/7/22. // Copyright (c) 2015年 All rights reserved. // //7,需要调用代理的的时候,将代理类的对象赋值为自己的代理(delegate)即可。 #import <Foundation/Foundation.h> #import "CSDN.h" #import "Yuzee.h" int main(int argc, const char * argv[]) { @autoreleasepool { Yuzee *uzee = [Yuzee new]; CSDN *SDN = [CSDN new]; uzee.delegate = SDN; [uzee Thinkblog]; } return 0; }
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 设计模式之创建型模式
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- 浅谈设计模式的学习
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- C#使用委托(delegate)实现在两个form之间传递数据的方法
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解