代理模式的解析-iOS

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

内容简介: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 


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

查看所有标签

猜你喜欢:

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

Spring Into HTML and CSS

Spring Into HTML and CSS

Molly E. Holzschlag / Addison-Wesley Professional / 2005-5-2 / USD 34.99

The fastest route to true HTML/CSS mastery! Need to build a web site? Or update one? Or just create some effective new web content? Maybe you just need to update your skills, do the job better. Welco......一起来看看 《Spring Into HTML and CSS》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

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

Markdown 在线编辑器