代理衍生及实现
来源:互联网 发布:游戏编程入门 csdn 编辑:程序博客网 时间:2024/04/30 21:39
1.什么是设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
什么是代理设计模式
生活中大家一定遇到这样的情况了:比如说我要买一包纸,不妨就是心相印的吧,那一般人的话我应该不是去心相印的工厂里面直接去买吧,而是我们在心相印专卖店或者什么超市啊,这些地方购买,这些地方实际上就是洁丽雅毛巾的代理。这其实和我们OO中的代理模式是很相似的。
代理设计模式的场合:
当对象A发生了一些行为,想告知对象B(让对象B成为对象A的代理对象)
对象B想监听对象A的一些行为(让对象B成为对象A的代理对象)
当对象A无法处理某些行为的时候,想让对象B帮忙处理(让对象B成为对象A的代理对象)
2.代理设计模式示例
- 婴儿吃饭睡觉
// 协议
#import<Foundation/Foundation.h>
@class Baby;
@protocolBabyProtocol<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.nannyrespondsToSelector:@selector(feedWithBaby:)]) {
[self.nannyfeedWithBaby:self];
}
}
- (void)sleepy
{
self.drowsiness += 5;
NSLog(@"婴儿困了");
// 通知保姆
if ([self.nannyrespondsToSelector:@selector(hypnosisWithBaby:)]) {
[self.nannyhypnosisWithBaby: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
理解:有一个婴儿,他本身不会自己吃饭和洗澡等等一些事情,于是婴儿就请了一个保姆,于是婴儿和保姆之间商定了一个协议,协议中写明了保姆需要做什么事情,而保姆就是这个代理人,即:婴儿和保姆之间有个协议,保姆遵守该协议,于是保姆就需要实现该协议中的条款成为代理人
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
什么是代理设计模式
生活中大家一定遇到这样的情况了:比如说我要买一包纸,不妨就是心相印的吧,那一般人的话我应该不是去心相印的工厂里面直接去买吧,而是我们在心相印专卖店或者什么超市啊,这些地方购买,这些地方实际上就是洁丽雅毛巾的代理。这其实和我们OO中的代理模式是很相似的。
代理设计模式的场合:
当对象A发生了一些行为,想告知对象B(让对象B成为对象A的代理对象)
对象B想监听对象A的一些行为(让对象B成为对象A的代理对象)
当对象A无法处理某些行为的时候,想让对象B帮忙处理(让对象B成为对象A的代理对象)
2.代理设计模式示例
- 婴儿吃饭睡觉
// 协议
#import<Foundation/Foundation.h>
@class Baby;
@protocolBabyProtocol<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.nannyrespondsToSelector:@selector(feedWithBaby:)]) {
[self.nannyfeedWithBaby:self];
}
}
- (void)sleepy
{
self.drowsiness += 5;
NSLog(@"婴儿困了");
// 通知保姆
if ([self.nannyrespondsToSelector:@selector(hypnosisWithBaby:)]) {
[self.nannyhypnosisWithBaby: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
理解:有一个婴儿,他本身不会自己吃饭和洗澡等等一些事情,于是婴儿就请了一个保姆,于是婴儿和保姆之间商定了一个协议,协议中写明了保姆需要做什么事情,而保姆就是这个代理人,即:婴儿和保姆之间有个协议,保姆遵守该协议,于是保姆就需要实现该协议中的条款成为代理人
0 0
- 代理衍生及实现
- 代理原理及实现
- cfa 衍生产品及分类
- TServerSocket 安装及衍生知识
- 二叉树pre-order,post-order,in-order,level-order遍历实现,及衍生问题
- 青蛙跳台阶衍生之变态跳台阶(递归,思路分析及代码实现)
- 代理模式及Java实现动态代理
- 代理模式及Java实现动态代理
- 代理模式及实现探究
- 代理模式及具体实现
- 代理模式--原理及实现
- 算法讲解:ac自动机及简单衍生
- 静态代理及动态代理原理及简单实现
- java中实现代理及委托代理模式
- java中实现代理及委托代理模式
- 代理模式-Java动态代理的实现及应用
- 详述代理模式及动态代理简单实现
- 用Squid实现代理上网及计费
- Android:AsyncTask源码解析
- 进程间通信之共享内存-系统调用mmap详解(基础篇)
- ruby on rails 关于微信企业号回调模式初步验证通过后再次签名验证失败的解决
- 文档注释,建立解释文档
- CCF 出现次数最多的数
- 代理衍生及实现
- 分享:Android系统的常用权限整理
- Chrome/Chromium HTML5 video 视频播放硬件加速
- Chapter 6 : Delegation和Debug - The Big Nerd Ranch Guide 读书笔记
- ubuntu下无法启动谷歌浏览器
- 食物链
- iOS View添加圆角
- 嵌入式SQL应用(C语言)
- HTML标签