代理模式的解析-iOS

栏目: IOS · 发布时间: 5年前

内容简介:1、简单工厂模式、工厂模式、抽象工厂模式的解析-iOS2、建造者模式的解析-iOS3、单例模式的解析-iOS

代理模式的解析-iOS

其他 设计模式 的介绍

1、简单工厂模式、工厂模式、抽象工厂模式的解析-iOS 

2、建造者模式的解析-iOS 

3、单例模式的解析-iOS 

4、原型模式的解析-iOS 

5、代理模式的解析-iOS 

6、适配器模式的解析-iOS 

7、装饰器模式的解析-iOS 

8、外观模式的解析-iOS 

9、桥接模式的解析-iOS 

10、组合模式的解析-iOS

什么是代理模式

代理是我们iOS开发经常遇到的一种设计模式。

就那我前段时间买房的经历来说明一下什么是代理模式。

就是前段时间我去看了房子,我看中了一个房子,然后房子没开盘,我又不在当地,没有实时的关注该房子的动态,如何我就找了个中介,委托他给我关注该房子的动态。这个模式就是代理模式。

代理模式的组成

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。

代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。百度百科

实用场景

在iOS中,我们通常使用代理来做消息的传递,就像我们iOS开发中经常使用的UITableView就是使用了代理,来创建cell,点击cell等一系列的操作

案例解析

就以我买房子为例子: 

我买房子,我找了一个中介,(其实我给房子找了一个保姆,只要房子有什么动态他就会给具体的信息)。

房子的代码如下:

//.h文件
#import
@class Huose;
//这个代理就是我们找的中介(相当于给我们这个房子找了个保姆,有什么动态随时通知我们)
@protocol HuosePropertySalesDelegate <NSObject>
/*
*房子即将开售
*/

-(void)huoseWillSale;
/*
*房子正在开售
*/

-(void)houseOnSaling;
/*
*房子已经卖完了
*/

-(void)houseSaled;
@end

@interface Huose : NSObject

@property(nonatomic,weak)id delegate;
/*
*房子即将开售
*/

-( void)willSale;
/*
*房子正在开售
*/

-( void)onSaling;
/*
*房子已经卖完了
*/

-( void)saled;

@end

//.m文件
#import "Huose.h"

@implementation Huose
/*
*房子即将开售
*/

-( void)willSale{
if ([ self.delegate respondsToSelector: @selector(huoseWillSale)]) {
[ self.delegate huoseWillSale];
}
}
/*
*房子正在开售
*/

-( void)onSaling{
if ([ self.delegate respondsToSelector: @selector(houseOnSaling)]) {
[ self.delegate houseOnSaling];
}
}
/*
*房子已经卖完了
*/

-( void)saled{
if ([ self.delegate respondsToSelector: @selector(houseSaled)]) {
[ self.delegate houseSaled];
}
}

@end

买房子接到中介的通知去做一些准备,记得要和中介签协议 

_huose.delegate = self;

#import "BuyHousePerson.h"
#import "Huose.h"

@interface BuyHousePerson()<HuosePropertySalesDelegate>
@property(nonatomic, strong)Huose *huose;
@end

@implementation BuyHousePerson
-(void)buyHouse{
    _huose= [[Huose alloc]init];
    //和中介签协议
    _huose.delegate = self;
}
//代码这些代码,就是中介通知我,告诉我我们应该做哪些事情
#pragma mark - PropertySalesDelegate
/*
 *房子即将开售
 */
-(void)huoseWillSale{
    //房子即将开售了,要我们准备好刚需资料
}
/*
 *房子正在开售
 */
-(void)houseOnSaling{
    //房子正在开售了,要我们准备好摇号
}
/*
 *房子已经卖完了
 */
-(void)houseSaled{
    //摇号中了,要我们准备首付,准备贷款
}

@end

优缺点

优点: 

1、职责清晰:就是真实的角色不需要知道代理做的细节,只要知道结果,就是说,我不需要知道中介怎么匹配适合我的房源,这些匹配的过程只需要交给代理来做,我只要知道哪些房源适合我就可以了。

2、有很高的扩展性 

3、代理对象和我们的真实对象和目标对象之间只是起到中介的作用。 

4、解耦,代理类和委托代理的直接不需要知道对方做了啥 

缺点:代理是一对一的,需要委托者和代理之间签订协议。

总结

如果有写的不正确或者侵权的,希望大家给我提出来,我会及时修改。谢谢大家。

--------------------- 

作者:小雅_yyq 

原文:https://blog.csdn.net/u014644610/article/details/80683103 


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据挖掘概念与技术

数据挖掘概念与技术

(加)Jiawei Han;Micheline Kamber / 范明、孟小峰 / 机械工业 / 2007-3 / 55.00元

《数据挖掘概念与技术(原书第2版)》全面地讲述数据挖掘领域的重要知识和技术创新。在第1版内容相当全面的基础上,第2版展示了该领域的最新研究成果,例如挖掘流、时序和序列数据以及挖掘时间空间、多媒体、文本和Web数据。本书可作为数据挖掘和知识发现领域的教师、研究人员和开发人员的一本必读书。 《数据挖掘概念与技术(原书第2版)》第1版曾是受读者欢迎的数据挖掘专著,是一本可读性极佳的教材。第2版充实了数据......一起来看看 《数据挖掘概念与技术》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器