您的位置:首页 > 移动开发 > Objective-C

OC中的代理设计模式

2015-07-22 13:48 351 查看
1,代理模式的概念

传入的对象,代替当前的类完成了某个功能,我们称之为代理模式。在OC中,代理设计模式是经常遇到的一种设计模式。

2,实现代理设计模式思路和步骤

1,定义一个协议(写在外面或者里面随便)并声明代理类需要实现的方法列表。

2,创建一个代理类,并遵守上面的协议。

3,在需要被代理的类中定义一个对象类型为ID并且遵守代理协议的成员变量。

4,在被代理的类中调用上面的成员变量_delegate(代理)的方法,调用代理类的方法。

5,在需要使用代理的地方为被代理的类的成员变量赋值。

3,代理设计模式的用处

1,可以用来监听,代理可以监听被代理的一些行为并实现相应的方法。

2,可以用来通知,被代理的类发生了一些行为,可以第一时间通知代理。

3,代处理,当被代理对象无法完成某些行为时,可以委托代理来完成。

4,事例程序

今天,我突然有急事,更新不了blog,但是我很想更新,于是我想我的代理CSDN帮我发blog。

//
//  Yuzee.h
//
//  Created by  on 15/7/22.
//  Copyright (c) 2015年  All rights reserved.
//

#import <Foundation/Foundation.h>
//2,于是我定义了一个协议,声明了一个可以发博客的blog方法。
@protocol YuzeeProtocol <NSObject>

- (void)blog;

@end

//1,首先我创建一个Yuzee的类,代表我。并且我有一个Thinkblog的方法,代表我想发blog,但是我没有发blog的方法。
@interface Yuzee : NSObject

//定义一个对象类型为id且遵守协议的成员变量delegate(固定写法)
@property (nonatomic , weak) id<YuzeeProtocol> delegate;

- (void)Thinkblog;

@end

//
//  CSDN.m
//
//  Created by  on 15/7/22.
//  Copyright (c) 2015年  All rights reserved.
//

#import "CSDN.h"
#import "Yuzee.h"
//3,接着我又创建了一个代理类名字为CSDN,并且使我的代理遵守协议
@interface CSDN () <YuzeeProtocol>

@end

@implementation CSDN

//4,我的代理CSDN遵守了我的协议,也就拥有了协议中的方法名,于是在代理中写上实现功能的代码。
- (void)blog{

NSLog(@"CSDN正在代理发博客......");
}

@end

//
//  Yuzee.m
//
//  Created by  on 15/7/22.
//  Copyright (c) 2015年  All rights reserved.
//

#import "Yuzee.h"

@implementation Yuzee

//5,当我实现了想发博客的功能时,会通知代理。
- (void)Thinkblog{

NSLog(@"Yuzee想发博客......");

//6,就可以调用代理的blog方法代替我发blog
[self.delegate blog];
}

@end


//
//  main.m
//  发博客-代理模式
//
//  Created by on 15/7/22.
//  Copyright (c) 2015年  All rights reserved.
//

//7,需要调用代理的的时候,将代理类的对象赋值为自己的代理(delegate)即可。
#import <Foundation/Foundation.h>
#import "CSDN.h"
#import "Yuzee.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {

Yuzee *uzee = [Yuzee new];
CSDN *SDN = [CSDN new];
uzee.delegate = SDN;
[uzee Thinkblog];
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息