黑马程序员_代理模式案例
来源:互联网 发布:战地1枪械数据网站 编辑:程序博客网 时间:2024/06/08 10:00
------- IOS培训、<a href="http://www.itheima.com" target="blank”>Mac、期待与您交流! —————
1. 设计原理
Ø 有些麻烦的事情不想自己亲自做,就可以找个人帮忙做,即交给代理对象去做
2. 设计原则
Ø 首先得拥有某个代理对象属性
Ø 其次要很清楚代理有哪些方法
Ø 最后要保证能解耦
3. 实现方案
Ø 定义一个protocol,在其中声明一些和代理沟通的方法
Ø 拥有一个代理属性id<protocol>delegate
Ø 让代理遵守protocol
声明代理协议
--TicketDelegate.h--
// 声明一些跑腿方法
@protocol TicketDelegate <NSObject>
// 返回票价
- (double) ticketPrice;
// 还剩多少张票
- (int) leftTicketsNumber;
@end
--Person.h--
#import <Foundation/Foundation.h>
#import "TicketDelegate.h"
@interface Person : NSObject
- (void) buyTicket;
// 拥有一个代理属性
// id代表代理的类名随便
// 但必须遵守TicketDelegate协议
@property (nonatomic, retain) id<TicketDelegate> delegate;
@end
--Person.m--
#import "Person.h"
@implementation Person
// 买电影票
- (void)buyTicket
{
// 叫代理去帮自己买票(询问一下票价、询问一下票的剩余张数)
double price = [_delegate ticketPrice];
int number = [_delegate leftTicketsNumber];
NSLog(@"通过代理的帮忙,票价=%f,还剩%d张票", price, number);
}
- (void)dealloc
{
[_delegate release];
[super dealloc];
}
@end
--Agent.h--
#import <Foundation/Foundation.h>
#import "TicketDelegate.h"
@interface Agent : NSObject <TicketDelegate>
@end
--Agent.h--
#import "Agent.h"
@implementation Agent
// 剩余的票数
- (int)leftTicketsNumber
{
// ... 亲自跑电影院\或者打电话
return 1;
}
// 每一张票多少钱
- (double)ticketPrice
{
// ... 亲自跑电影院\或者打电话
return 1000;
}
@end
--Main.m--
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Agent.h"
#import "NextAgent.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *p = [[[Person alloc] init] autorelease];
Agent *a = [[[Agent alloc] init] autorelease];
p.delegate = a;
[p buyTicket];
}
return 0;
}
- 黑马程序员_代理模式案例
- 黑马程序员_代理模式
- 黑马程序员_代理设计模式
- 黑马程序员_代理模式之动态代理
- 黑马程序员_代理章节引出的代理模式
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_代理
- 黑马程序员_ 利用oc的协议实现代理模式
- 黑马程序员-代理模式
- leetcode刷题7:前序遍历二叉树
- Android下的多线程
- Android Service介绍
- Oracle的基本使用
- HDU 2846 Repository (字典树 统计个数)
- 黑马程序员_代理模式案例
- 或再涨10%[大盘]5月三大利好可期剖
- 数据结构(C++ VS 2008)之序
- 简单文件操作(File)小结
- 作为讲解Asp.net控件开发的第一部分:继承开发(3)
- 实习有感
- 黑马程序员—JAVA基础之多态
- 对js关键字命名的疑问
- 利用ASP.NET服务器端自定义控件实现XML文件中还原表单