首页 > 代码库 > 代理设计模式
代理设计模式
1.
什么是设计模式
- 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
什么是代理设计模式
- 生活中大家一定遇到这样的情况了:比如说我要买一包纸,不妨就是心相印的吧,那一般人的话我应该不是去心相印的工厂里面直接去买吧,而是我们在心相印专卖店或者什么超市啊,这些地方购买,这些地方实际上就是洁丽雅毛巾的代理。这其实和我们OO中的代理模式是很相似的。
代理设计模式的场合:
- 当对象A发生了一些行为,想告知对象B(让对象B成为对象A的代理对象)
- 对象B想监听对象A的一些行为(让对象B成为对象A的代理对象)
- 当对象A无法处理某些行为的时候,想让对象B帮忙处理(让对象B成为对象A的代理对象)
2.代理设计模式示例
- 婴儿吃饭睡觉
// 协议#import <Foundation/Foundation.h>@class Baby;@protocol BabyProtocol <NSObject>- (void)feedWithBaby:(Baby *)baby;- (void)hypnosisWithBaby:(Baby *)baby;@end
#import "BabyProtocol.h"@interface Baby : NSObject// 食量@property (nonatomic, assign) int food;// 睡意@property (nonatomic, assign) int drowsiness;// 饿- (void)hungry;// 睡意- (void)sleepy;@property (nonatomic, strong) id<BabyProtocol> nanny;@end@implementation Baby- (void)hungry{ self.food -= 5; NSLog(@"婴儿饿了"); // 通知保姆 if ([self.nanny respondsToSelector:@selector(feedWithBaby:)]) { [self.nanny feedWithBaby:self]; }}- (void)sleepy{ self.drowsiness += 5; NSLog(@"婴儿困了"); // 通知保姆 if ([self.nanny respondsToSelector:@selector(hypnosisWithBaby:)]) { [self.nanny hypnosisWithBaby:self]; }}@end
// 保姆@interface Nanny : NSObject <BabyProtocol>@end@implementation Nanny- (void)feedWithBaby:(Baby *)baby{ baby.food += 10; NSLog(@"给婴儿喂奶, 现在的食量是%i", baby.food);}- (void)hypnosisWithBaby:(Baby *)baby{ baby.drowsiness += 10; NSLog(@"哄婴儿睡觉, 现在的睡意是%i", baby.drowsiness);}@end
- 有一个婴儿,他本身不会自己吃饭和洗澡等等一些事情,于是婴儿就请了一个保姆,于是婴儿和保姆之间商定了一个协议,协议中写明了保姆需要做什么事情,而保姆就是这个代理人,即:婴儿和保姆之间有个协议,保姆遵守该协议,于是保姆就需要实现该协议中的条款成为代理人
代理设计模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。