OC-Protocol实现业务代理
创建一个Protocol,相当于java的接口,但,有些方法不必实现,例如以下
#import <Foundation/Foundation.h> @protocol MyProtocol @optional
- (void) test1; - (void) test2; - (void) test3;
@required
- (void) test4; @end
继承了该协议,并声明在@optional下的代码方法不是必须实现的,但@required下的方法必须实现。
例如以下Book类
#import <Foundation/Foundation.h>
#import "MyProtocol.h" @interface Book : NSObject <MyProtocol> @property (nonatomic,assign) int price; @end
#import "Book.h" @implementation Book - (void) test4
{
} - (void) dealloc
{
NSLog(@"Book is dealloc");
[super dealloc];
} @end
创建一个模拟买票样例。仅仅要实现了该接口 就可以作为买票代理人
#import <Foundation/Foundation.h> @protocol TicketAgentProtocol <NSObject> - (int) getTicketCount; - (int) getTicketPrice; @end
#import <Foundation/Foundation.h> #import "TicketAgentProtocol.h" @interface Person : NSObject @property (nonatomic,retain) id<TicketAgentProtocol> delegate; - (NSString *) buyTicket; @end
#import "Person.h" @implementation Person - (NSString *) buyTicket
{
return [NSString stringWithFormat:@"TICKET COUNT:%d ,TICKET PRICE:%d",
[_delegate getTicketCount],[_delegate getTicketPrice]];
} -(void)dealloc
{
[_delegate release]; [super dealloc];
} @end
创建一个符合条件的“代理人”,就可以实现买票业务。
#import <Foundation/Foundation.h>
#import "TicketAgentProtocol.h" @interface Other : NSObject <TicketAgentProtocol> @end
#import "Other.h" @implementation Other - (int) getTicketCount
{
return 1000;
} - (int) getTicketPrice
{
return 100;
} @end
#import <Foundation/Foundation.h>
#import "TicketAgentProtocol.h"
#import "Person.h"
#import "Other.h" int main(int argc, const char * argv[])
{ @autoreleasepool { Person *p=[[[Person alloc] init] autorelease];
Other *other=[[[Other alloc] init] autorelease];
p.delegate=other; NSLog(@"%@",[p buyTicket]); }
return 0;
}
OC-Protocol实现业务代理的更多相关文章
- (转载)OC学习篇之---代理模式
在前一篇文章我们介绍了OC中的协议的概念,这篇文章我们就来介绍一下OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的. ...
- Java业务代理模式~
业务代理模式用于解耦表示层和业务层. 它基本上用于减少表示层代码中的业务层代码的通信或远程查找功能.在业务层有以下实体. 客户端(Client) - 表示层代码可以是JSP,servlet或UI ja ...
- oc学习之路----代理模式
今天刚学完oc的代理模式,觉得有点新奇,第一次接触,原理 A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议 (protocol),B继承该协议来完成A代理给他的 ...
- OC学习篇之---代理模式
何实现代理模式的. 这里举一个简单的例子: 小孩类,护士类,保姆类,其中小孩类有两个方法:wash和play 这里代理对象就是:护士类.保姆类,小孩类是被代理对象. 看一下代码: 首先看一下小孩类: ...
- 黑马程序猿_ 利用oc的协议实现代理模式
先说下代理模式是什么吧 定义: 为其它对象提供一种代理以控制对这个对象的訪问.在某些情况下,一个对象不适合或者不能直接引用还有一个对象 而代理对象能够在client和目标对象之间起到中介的作用. 在看 ...
- OC中如何优化代理是否响应某个方法
看以下示例代码: if([_delegate respondsToSelector: @selector(someClassDidSomething:)){ [_delegate someClassD ...
- OC @protocol(声明协议 )
@protocol Study; int main(int argc, const char * argv[]) { @autoreleasepool { Student *stu = [[[Stud ...
- oc学习之路----代理模式2-使用步骤
之前已经写过一个个人关于代理模式的一些看法,现在就来总结一下使用代理模式的步骤吧. 1.先搞清楚谁是谁的代理(delegate) ● 2.定义代理协议,协议名称的命名规范:控件类名 + Delegat ...
- OC中的protocol
一. 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 2. 格式 协 ...
随机推荐
- log4net概述
log4net概貌 log4net是一个框架,用来记录日志的框架.为什么要记录日志呢?每个程序员都不能保证自己的程序完全没有错误,可是当程序已经部署的时候出现错误怎么办?我们这时候就要根据我们的日志文 ...
- PHP学习之-1.5 字符串
字符串 一个字符串是用双引号扩起来的一个词或者一个句子,比如 "Hello Word" ,你可以使用PHP语言输入这个字符串,像这样 <?php echo "Hel ...
- SPARK在linux中的部署,以及SPARK中聚类算法的使用
眼下,SPARK在大数据处理领域十分流行.尤其是对于大规模数据集上的机器学习算法.SPARK更具有优势.一下初步介绍SPARK在linux中的部署与使用,以及当中聚类算法的实现. 在官网http:// ...
- .NET常见面试题
面试题 1 什么是 CTS.CLS 和CLR 公共语言运行库(CLR)是一个CLI 的一个实现,包含了.NET 运行引擎和符合 CLI 的类库. 通用类型系统(CTS)包含在微软公司提交的 CLI ...
- ASP.NET、WinForm - 判断整个页面文本框是否为空
foreach(Control ctrl in Page.Controls) { foreach(Control childc in ctrl.Controls) { switch(childc.Ge ...
- JS - 图片放大器
下载地址:http://www.lanrentuku.com/js/tupian-1170.html
- 14.2.1 MySQL and the ACID Model
14.2 InnoDB Concepts and Architecture InnoDB 概念和结构体系: 14.2.1 MySQL and the ACID Model 14.2.2 InnoDB ...
- Swift - 创建代理协议实现页面间参数传递和方法调用
在开发中,经常需要用到协议代理模式.比如,进入编辑页面修改数据后,将新数据回传到主界面. 下面通过一个样例来说明协议代理模式,功能如下: 1,主页面有一个标签和一个修改按钮,点击修改按钮会跳转到编辑页 ...
- ABP模块设计
ABP模块设计 返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术 ...
- [More Effective C++]条款22有关返回值优化的验证结果
(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回 ...