创建一个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实现业务代理的更多相关文章

  1. (转载)OC学习篇之---代理模式

    在前一篇文章我们介绍了OC中的协议的概念,这篇文章我们就来介绍一下OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的. ...

  2. Java业务代理模式~

    业务代理模式用于解耦表示层和业务层. 它基本上用于减少表示层代码中的业务层代码的通信或远程查找功能.在业务层有以下实体. 客户端(Client) - 表示层代码可以是JSP,servlet或UI ja ...

  3. oc学习之路----代理模式

    今天刚学完oc的代理模式,觉得有点新奇,第一次接触,原理 A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议 (protocol),B继承该协议来完成A代理给他的 ...

  4. OC学习篇之---代理模式

    何实现代理模式的. 这里举一个简单的例子: 小孩类,护士类,保姆类,其中小孩类有两个方法:wash和play 这里代理对象就是:护士类.保姆类,小孩类是被代理对象. 看一下代码: 首先看一下小孩类: ...

  5. 黑马程序猿_ 利用oc的协议实现代理模式

    先说下代理模式是什么吧 定义: 为其它对象提供一种代理以控制对这个对象的訪问.在某些情况下,一个对象不适合或者不能直接引用还有一个对象 而代理对象能够在client和目标对象之间起到中介的作用. 在看 ...

  6. OC中如何优化代理是否响应某个方法

    看以下示例代码: if([_delegate respondsToSelector: @selector(someClassDidSomething:)){ [_delegate someClassD ...

  7. OC @protocol(声明协议 )

    @protocol Study; int main(int argc, const char * argv[]) { @autoreleasepool { Student *stu = [[[Stud ...

  8. oc学习之路----代理模式2-使用步骤

    之前已经写过一个个人关于代理模式的一些看法,现在就来总结一下使用代理模式的步骤吧. 1.先搞清楚谁是谁的代理(delegate) ● 2.定义代理协议,协议名称的命名规范:控件类名 + Delegat ...

  9. OC中的protocol

    一. 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 2. 格式 协 ...

随机推荐

  1. 来推荐个免费的PPT演示工具--ZohoShowTime

    事实上这个不算新产品了,这次是做了一些大的改进.上次在Zoho的全球用户大会上,全程演讲都是用的这个工具.Zoho这点非常好啊.自己的产品自己带头用.个人认为它最大的用处就是.离得远的观众能够在自己的 ...

  2. Qt 打包发布 不能动态打开图片显示问题

    刚写完一个图片标注工具, 发现在我电脑可以实时打开照片显示出来,在他人的电脑上就不可以. 原来Qt默认只识别png 具体解决方案: 原地址:http://blog.csdn.net/goodlixue ...

  3. jquery 提交数据

    目录 jquery ajax的应用 1 表单提交 2 ajax的提交(ajax post get) 普通的表单提交 <%@ page language="java" impo ...

  4. CCNP交换实验(5) -- 网关热备冗余

    HSRP:1.启用HSRP功能,并设置虚拟地址IP, 1为standby的组号.2.相同组号的路由器属于同一个HSRP组,所有属于同一个HSRP组的路由器的虚拟地址必须一致.3.HSRP的优先级默认为 ...

  5. asp.net检查验证字符串是否为纯数字方法小结

    原文  asp.net检查验证字符串是否为纯数字方法小结 在asp.net中验证字符串是不是为数字我们没有像php中那么多丰富的函数来直接使用,这里我整理了一些比较实例的验证字符串是否为纯数字方法代码 ...

  6. jquery mobile实现拨打电话功能的几种方法

    3.使用wtai协议进行拨打电话. 在wml中可以调用设备的wtai函数来呼叫特定的电话号码.目前,越来越多的浏览器都支持这个功能,但还不是所有. 代码如下所示: 复制代码 代码如下: <inp ...

  7. SilkTest Q&A 8

    Q72.如何在一个testplan中运行所有的testcase? A72. 1.打开testplan 2.点击Run/Run All Tests菜单,SilkTest开始执行testplan中所有的t ...

  8. HDU - 4944 FSF’s game

    Problem Description FSF has programmed a game. In this game, players need to divide a rectangle into ...

  9. System Request 进入KDB模式过程详解

    0   echo g > /proc/sysrq-trigger   怎么让系统停下来,进入进入KDB循环? 1   需要简单了解下:Linux Magic System Request 2   ...

  10. QNX 多线程 (线程1每隔20ms读取 number;线程2每隔10ms计算一次)

    #include <pthread.h>#include <stdio.h>#include <sys/time.h>#include <string.h&g ...