第07天OC语言(04):代理设计模式
2017-07-19 00:00
399 查看
不要等到明天,明天太遥远,今天就行动。
#####须读:看完该文章你能做什么?
代理设计模式的基本概念
代理设计模式的使用场合
#####学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
如何声明一个协议,协议的注意点
#####一、本章笔记
#####二、code
######main.m
######BabyProcotol
######Baby
######Nanny
######Student
######Teacher
######Dog
#####须读:看完该文章你能做什么?
代理设计模式的基本概念
代理设计模式的使用场合
#####学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
如何声明一个协议,协议的注意点
#####一、本章笔记
1.什么是设计模式 设计模式(design pattern) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式 是为了 可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式已于他人于系统 都是多赢的 设计模式 使 代码编制真正工程化; 设计模式 是软件工程的基石脉络,如同大夏的结构一样 例子 生活中大家一定遇到这样的情况了: 比如 说 我要买一包纸, 不妨就是心心相印。 那么一般人的话 我应该不是去心心相印的工厂里面去直接买把。 而是 我们在心心相印 专卖店 或者 什么超市的。 这些地方购买。这些地方实际上就是洁丽雅毛巾的代理 这气势和我们OO中的代理模式是很相似的。 代理设计模式的场合 当对象A 发生了一些行为, 想告诉 对象B(让对象B 称为对象A的代理对象) 对象B 想监听对象A的行为 (让 对象B 成为对象A的代理对象) 当对象A 无法处理某些行为的时候,想让对象B帮忙处理 (让 对象B 成为对象A的代理对象)
#####二、code
######main.m
#pragma mark 04-代理设计模式 #pragma mark - 代码 #import <Foundation/Foundation.h> #pragma mark 类 #import "Baby.h" #import "Nanny.h" #import "Student.h" #import "Teacher.h" #import "Dog.h" #pragma mark - main函数 int main(int argc, const char * argv[]) { // 1.创建婴儿 Baby *b = [Baby new]; // 2.创建保姆 Nanny *n = [Nanny new]; // 3.将保姆赋值给婴儿 // b.nanny = n; // 4.换保姆 Student *s = [Student new]; #pragma mark 错误信息1 /* b.nanny = s; // incompatible pointer types assgining to 'Nanny *' from 'Student *' 保姆的对象 不是 学生的对象 如果Student没有实现保姆的方法 就会报错2 '-[Student feedFood:]: unrecognized selector sent to instance 0x100100620' */ // b.nanny = s; // 5.再次换保姆 Teacher *t = [Teacher new]; // b.nanny = t; Dog *d = [Dog new]; b.nanny = d; // 5.婴儿发飙 [b food]; [b sleeply]; return 0; }
######BabyProcotol
>>>.h #import <Foundation/Foundation.h> @class Baby; @protocol BabyProcotol <NSObject> // 喂婴儿吃东西 - (void)feedFood:(Baby *)baby; // 哄婴儿睡觉 - (void)hongBady:(Baby *)baby; @end
######Baby
>>>.h #import <Foundation/Foundation.h> #import "BabyProcotol.h" @class Nanny,Student; @interface Baby : NSObject /* 什么是代理设计模式 心心相印 和 超市 超市 就是心心相印的代理 它可以帮助 心心相印 买纸巾 也就是说,代理也帮助 另外一个类做一些事情 代理设计模式的应用场景 1.当A对象 想 监听B对象的一些变化时,可以使用代理设计模式 保姆想监听婴儿的变化,那么保姆就可以成为婴儿的代理,当婴儿发生变化之后 保姆就可以监听到 2.当B对象发生一些事情,想通知 A 队形的时候,可以使用代理设计模式 婴儿想通知保姆,那么就可以让保姆成为婴儿的代理,只要保姆成为婴儿的代理,以后婴儿发生变化 就可以通知保姆 3.当对象A 无法处理某些行为的时候, 想让对象B帮忙处理(让对象B成为对象A的代理对象) 婴儿无法吃东西,也无法自己入睡,所以可以通过保姆帮忙处理。只要让保姆成为婴儿的代理 就可以帮婴儿喂他吃东西 和哄她睡觉 */ // 饥饿程度 @property (nonatomic,assign) int hungry; // 睡意 @property (nonatomic,assign) int sleep; // 让婴儿拥有一个保姆 //@property (nonatomic,strong) Nanny *nanny; //@property (nonatomic,strong) Student *student; // 如果使用id类来接收保姆,如果将来换保姆了,婴儿类不用修改代码 //@property (nonatomic,strong) id nanny; // 引发出协议,作为保姆 必须要有 喂婴儿和 哄婴儿睡觉的方法 @property (nonatomic,strong) id<BabyProcotol> nanny; // 吃东西 - (void)food; // 睡觉 - (void)sleeply; @end >>>.m #import "Baby.h" #import "Nanny.h" @implementation Baby // 吃东西 - (void)food { self.hungry +=5; NSLog(@"要吃东西 %i",self.hungry); // 通知保姆 if ([self.nanny respondsToSelector:@selector(feedFood:)]) { [self.nanny feedFood:self]; } } // 睡觉 - (void)sleeply { self.sleep +=5; NSLog(@"困了 %i",self.sleep); // 通知保姆 if ([self.nanny respondsToSelector:@selector(hongBady:)]) { [self.nanny hongBady:self]; } } @end
######Nanny
>>>.h #import <Foundation/Foundation.h> #import "BabyProcotol.h" @class Baby; @interface Nanny : NSObject<BabyProcotol> /* // 喂婴儿吃东西 - (void)feedFood:(Baby *)baby; // 哄婴儿睡觉 - (void)hongBady:(Baby *)baby; */ @end >>>.m #import "Nanny.h" #import "Baby.h" @implementation Nanny // 喂婴儿吃东西 - (void)feedFood:(Baby *)baby { baby.hungry -= 10; NSLog(@"喂婴儿吃东西 %i",baby.hungry); } // 哄婴儿睡觉 - (void)hongBady:(Baby *)baby { baby.sleep += 10; NSLog(@"哄婴儿睡觉 %i",baby.sleep); } @end
######Student
>>>.h #import <Foundation/Foundation.h> #import "BabyProcotol.h" @class Baby; @interface Student : NSObject<BabyProcotol> /* // 喂婴儿吃东西 - (void)feedFood:(Baby *)baby; // 哄婴儿睡觉 - (void)hongBady:(Baby *)baby; */ @end >>>.m #import "Student.h" #import "Baby.h" @implementation Student // 喂婴儿吃东西 - (void)feedFood:(Baby *)baby { baby.hungry -= 10; NSLog(@"喂婴儿吃东西 %i",baby.hungry); } // 哄婴儿睡觉 - (void)hongBady:(Baby *)baby { baby.sleep += 10; NSLog(@"哄婴儿睡觉 %i",baby.sleep); } @end
######Teacher
>>>.h #import <Foundation/Foundation.h> #import "BabyProcotol.h" @interface Teacher : NSObject<BabyProcotol> @end >>>.m #import "Teacher.h" #import "Baby.h" @implementation Teacher // 喂婴儿吃东西 - (void)feedFood:(Baby *)baby { baby.hungry -= 10; NSLog(@"喂婴儿吃东西 %i",baby.hungry); } // 哄婴儿睡觉 - (void)hongBady:(Baby *)baby { baby.sleep += 10; NSLog(@"哄婴儿睡觉 %i",baby.sleep); } @end
######Dog
>>>.h #import <Foundation/Foundation.h> #import "BabyProcotol.h" @interface Dog : NSObject<BabyProcotol> @end >>>.m #import "Dog.h" #import "Baby.h" @implementation Dog // 喂婴儿吃东西 - (void)feedFood:(Baby *)baby { baby.hungry -= 10; NSLog(@"喂婴儿吃东西 %i",baby.hungry); } // 哄婴儿睡觉 - (void)hongBady:(Baby *)baby { baby.sleep += 10; NSLog(@"哄婴儿睡觉 %i",baby.sleep); } @end
相关文章推荐
- 第07天OC语言(05):代理设计模式练习及规范
- Oc语言之Protocol代理设计模式
- OC视频笔记5.4(协议的定义与使用)(代理设计模式)(代理设计模式思想)
- OC视频笔记-代理设计模式
- ObjectC语言基础1—block、protocol、代理设计模式
- 04 设计模式之--代理设计模式
- 【Objective-C】OC中代理(委托)设计模式
- 黑马程序员——OC语言------Block、protocol协议、代理设计
- 黑马程序员——OC语言——block、protocol、代理模式
- OC---protocol代理设计模式
- OC中的代理设计模式
- go语言: 设计模式-代理模式(Go语言描述)
- 【Objective-C】OC中代理(委托)设计模式
- OC循环渐进:代理设计模式
- [黑马程序员][OC]代理设计模式
- 学习笔记:OC的protocol协议及代理设计模式
- OC语言之学习篇——03——代理模式
- OC基础—代理设计模式
- 黑马程序员——OC语言之代理模式
- 设计模式_04 代理模式