iOS开发 - 协议与代理

本文介绍了协议的概念及其分类,详细解释了正式协议的定义与使用方法,并通过一个具体实例展示了如何利用代理模式来实现低耦合的设计思想。

协议

1、简介

1.1 协议可以理解为规范,不同的对象遵守相同的规范就可以在规范内去实现相同的功能

1.2 不同的浏览器都能打开同一个网站,并显示出相同的效果,就是因为他们都遵守了解析HTML的规范

2、协议分类

2.1 非正式协议(informal protocol)

查阅官方文档可知,非正式协议就是NSObject或他的子类的分类,这里不作讲解,以后会具体讲解分类

2.2 正式协议

正式协议,即规定了有一些列的方法,可以定义是否必须实现,也可以采用其他的协议

3、协议使用

1、定义

协议使用<>定义,如<NSObject>

协议可以单独定义为一个头文件,即.h文件,也可以在一个类中定义

2、关键字

@protocol 协议名 <父协议>

// 这里是协议方法

@end

3、协议方法的限制

@required修饰的协议必须实现,是默认关键字

@optional修饰的协议方法,可选择是否实现

协议只提供方法,不提供具体的实现

代理

1、简介

代理是一种设计模式,主要目的是实现低耦合的设计思想

2、概念

2.1 代理方

2.1.1 实现某个方法或功能的那一方

2.1.2 在正式协议中,只有遵守协议才能成为代理方

2.2 委托方

2.2.1 将方法或任务交给代理方实现的那一方

2.2.2 在正式协议中,多将协议定义在委托方

2.3 协议、代理方、委托方的关系

2.3.1 协议是代理方、委托方的限制,作为一种约束双方的方式

2.3.2 协议是代理方、委托方的通道,可以用来传递数据等

3、具体实例

2.3.1 情景

有一个中国买家想买美版苹果电脑,但是不方便,刚好他有朋友在美国,可以帮他代购

2.3.2 具体分析

中国买家:委托方

韩国买家:代理方

约束条件:协议,委托方找代理方办事情,但是办什么事情呢,这就是协议里面的内容,即代购苹果电脑

2.3.3 关键代码

// 单独定义协议的头文件

#import <Foundation/Foundation.h>

@protocol Purchase <NSObject>

//必须实现
@required
- (void)buyComputer;

// 可选择是否实现
@optional
- (void)cutPrice;

@end


// 也可以在委托方定义协议
// @protocol Purchase <NSObject>
// @required
// - (void)buyComputer;
// @optional
// - (void)cutPrice;
// @end

// 委托方
@interface Buyer : NSObject

// 只有遵守协议的对象才能成为代理
@property id<Purchase> delegate;

// 委托方的方法
- (void)planBuyComputer;

@end

// 代理方
// 只有遵守协议才能成为代理
@interface Agent : NSObject <Purchase>
@end

// 代理方实现协议方法
- (void)buyComputer
{
    NSLog(@"代购者成功购买了电脑...");
}

// 主函数
// 1.创建对象
Buyer *buyer = [[Buyer alloc] init];
Agent *agent = [[Agent alloc] init];

// 2.设置代理
buyer.delegate = agent;

// 3.实现方法
[buyer planBuyComputer];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值