iOS架构师_代理模式(代理和协议的区别)

代理模式的定义:

为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

这里写图片描述

UML示意图

这里写图片描述

代理与协议的区别:

代理原理:代码示例

裁判需要知道r跑了多远的信息.

创建Person类

Person.h

//  裁判要知道你得多快

#import <Foundation/Foundation.h>
@class Person;

@protocol PersonDelegate <NSObject>

- (void)person:(Person *)person run:(NSInteger)speed;

@end

@interface Person : NSObject
@property (nonatomic, weak) id<PersonDelegate> delegate;

- (void)run:(NSInteger)speed;

@end

Person.m

#import "Person.h"

@implementation Person
- (void)run:(NSInteger)speed {
    if (self.delegate && [self.delegate respondsToSelector:@selector(person:run:)]) {
        [self.delegate person:self run:speed];
    }
}
@end

ViewController

#import "ViewController.h"
#import "Person.h"

@interface ViewController () <PersonDelegate>
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    Person *per = [Person new];
    per.delegate = self;
    [per run:50];

}

- (void)person:(Person *)person run:(NSInteger)speed {
    NSLog(@"run = %ld",speed);
}
@end

协议:1.用来规范接口 2.筛选传入对象

创建协议类DataProtocol

DataProtocol.h

#import <Foundation/Foundation.h>

@protocol DataProtocol <NSObject>

- (NSInteger)dataSouce1;
- (NSInteger)dataSouce2;


@end

创建Model文件

Model.h

#import <Foundation/Foundation.h>
#import "DataProtocol.h"

@interface Model : NSObject<DataProtocol>

@end

必须要遵守协议,实现协议中的方法
Model.m

#import "Model.h"

@implementation Model
- (NSInteger)dataSouce1{
    return 0;
}

- (NSInteger)dataSouce2{
    return 0;
}
@end

ViewController

#import "ViewController.h"
#import "Person.h"
#import "DataProtocol.h"
#import "Model.h"
@interface ViewController () <PersonDelegate, DataProtocol>
@property (nonatomic, assign) NSInteger num;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

}

//这里必须使用遵守了DataProtocol协议的model
- (void)testData:(id <DataProtocol>)model {
    self.num = [model dataSouce1];
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值