OC基础—代理模式设计
2014-04-28 10:53
387 查看
------ android培训、java培训、期待与您交流! ----------
代理模式设计
代理模式:(协议的应用)
我们来举一个例子来体验一下代理模式的思想:某个人想去看电影,但是比较忙,所以就要找一个代理人,让他去帮自己询问票价,剩余票数。这个简单来说就是代理模式:展示一些东西,把功能交给各种代理去做,我只需要返回的东西用来显示。
要想体验代理模式必须建立一个协议,想要做代理就必须遵守这个协议,让我知道你可以做什么事情。如果不遵守这个协议,那么这个改天我们换了个代理,那么我们要修改很多东西,一会我们会介绍,下面我们来看一下这个协议:
协议TicketDelegate.h
我们建一个代理来遵守这个协议:
代理Agent.h
之后我们来建立一个Person,拥有一个Agent属性
Person.h
这里可以体会我们有id<TicketDelegate>的好处了吧,这个delegate可以是任何类型的,只要是遵守了这个协议就可以,这样可以防止我们换了一个代理,那么Person.h就要修改,Person.m就要修改,甚至连方法都要重新写。现在好了,利用协议,我们只需要新的代理遵守这个协议,就可以了。
来实现一下Person.m
之后来试验一下
main函数:
这上面就是代理模式的思想,非常的灵活。这是一个架构的思想,一个好的架构可以为我们的项目带来非常深远的影响。
------ android培训、java培训、期待与您交流! ----------
代理模式设计
代理模式:(协议的应用)
我们来举一个例子来体验一下代理模式的思想:某个人想去看电影,但是比较忙,所以就要找一个代理人,让他去帮自己询问票价,剩余票数。这个简单来说就是代理模式:展示一些东西,把功能交给各种代理去做,我只需要返回的东西用来显示。
要想体验代理模式必须建立一个协议,想要做代理就必须遵守这个协议,让我知道你可以做什么事情。如果不遵守这个协议,那么这个改天我们换了个代理,那么我们要修改很多东西,一会我们会介绍,下面我们来看一下这个协议:
协议TicketDelegate.h
#import <Foundation/Foundation.h> @protocol TicketDelegate <NSObject> // 返回票价 - (double)ticketPrice; // 还剩多少张票 - (int)leftTicketsNumber; @end只要遵守了这个协议,那么就拥有了这两个方法,我们就只到你可以做什么了
我们建一个代理来遵守这个协议:
代理Agent.h
#import <Foundation/Foundation.h> @protocol TicketDelegate; @interface Agent : NSObject <TicketDelegate> @end实现一下Agent.m
#import "Agent.h" #import "TicketDelegate.h" @implementation Agent - (double)ticketPrice { // 返回票价 return 1000; } - (int)leftTicketsNumber { // 返回剩余张数 return 1; } @endAgent遵守了TicketDelegate这个协议,就用了这个协议的方法所以在.h文件中不用声明,直接在.m文件中实现就行。
之后我们来建立一个Person,拥有一个Agent属性
Person.h
#import <Foundation/Foundation.h> @protocol TicketDelegate; @interface Person : NSObject // 拥有一个代理属性,代理的类名随便,必须遵守TicketDelegate协议 @property (nonatomic, strong) id<TicketDelegate> delegate; - (void)byTicket; @end
这里可以体会我们有id<TicketDelegate>的好处了吧,这个delegate可以是任何类型的,只要是遵守了这个协议就可以,这样可以防止我们换了一个代理,那么Person.h就要修改,Person.m就要修改,甚至连方法都要重新写。现在好了,利用协议,我们只需要新的代理遵守这个协议,就可以了。
来实现一下Person.m
#import "Person.h" #import "TicketDelegate.h" @implementation Person // 买电影票 - (void)byTicket { // 叫代理去帮自己买票(询问一下票价,询问一下剩余的张数) double price = [_delegate ticketPrice]; int number = [_delegate leftTicketsNumber]; NSLog(@"通过代理的帮忙,票价=%f,还剩%d张票", price, number); } @end这里就是委托代理来为我们办事。
之后来试验一下
main函数:
#import <Foundation/Foundation.h> #import "Person.h" #import "Agent.h" int main( ) { // 人 Person *p = [[Person alloc] init]; // 代理 Agent *a = [[Agent alloc] init]; // 设置代理人 p.delegate = a; // 人打算看电影 [p byTicket]; return 0; }这里如果代理人这个类没有遵守TicketDelegate这个协议,那么就会发出警告。
这上面就是代理模式的思想,非常的灵活。这是一个架构的思想,一个好的架构可以为我们的项目带来非常深远的影响。
------ android培训、java培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员——OC基础学习(五)---分类(Category),代码块Block和protocol代理设计模式
- OC基础—代理设计模式
- oc基础-设计代理模式理解
- 【设计模式基础】结构型模式 - 7 - 代理(Proxy)
- [黑马程序员][OC]代理设计模式
- OC视频笔记5.4(协议的定义与使用)(代理设计模式)(代理设计模式思想)
- 第07天OC语言(05):代理设计模式练习及规范
- OC基础之 ---------- block / 代理模式 ,协议 /
- 第07天OC语言(04):代理设计模式
- OC学习——OC中的@protocol(@required、@optional)、代理设计模式
- OC中的设计模式--代理
- OC中的设计模式(代理设计模式)(类目)
- OC基础-设计模式之通知中心(广播)
- Java基础 - 类的加载,类加载器,反射,动态代理,模板设计模式,JDK5新特性,枚举(类),JDK1.7新特性
- 学习笔记:OC的protocol协议及代理设计模式
- OC中代理(委托)设计模式
- OC循环渐进:代理设计模式
- OC视频笔记-代理设计模式
- OC设计模式之代理(委托)设计模式
- OC-中介找房-代理设计模式