博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oc66--代理模式应用2
阅读量:6529 次
发布时间:2019-06-24

本文共 2840 字,大约阅读时间需要 9 分钟。

////  BabyProtocol.h#import 
@class Baby;@protocol BabyProtocol
// 喂婴儿吃东西- (void)feedFood:(Baby *)baby;// 哄婴儿睡觉- (void)hongBaby:(Baby *)baby;@end
////  Baby.h//  day17#import 
#import "BabyProtocol.h"@class Nanny, Studnet;/* 什么是代理设计模式 心相印和超市 超市就是心相印的代理, 它可以帮助心相印卖纸巾 也就是说, 代理也帮助另外一个类做一些事情 代理设计模式的应用场景 3.当对象A无法处理某些行为的时候,想让对象B帮忙处理(让对象B成为对象A的代理对象) , 代理就相当于助手一样。 婴儿无法自己吃东西, 也无法自己入睡, 所以可以让保姆帮忙处理. 只要让保姆成为婴儿的代理就可以帮婴儿喂它吃东西和哄他睡觉 */@interface Baby : NSObject// 饥饿程度@property (nonatomic, assign) int hungry;// 睡意@property (nonatomic, assign) int sleep;// 吃东西- (void)food;// 困了- (void)sleepy;// 让婴儿拥有一个保姆//@property (nonatomic, strong) Nanny *nanny;//@property (nonatomic, strong) Studnet *stu;// 如果使用id类型来接收保姆, 如果将来换保姆了, 婴儿类不用修改代码,id就是object,@property (nonatomic, strong) id
nanny;@end
////  Baby.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)sleepy{    self.sleep += 5;    NSLog(@"困了 %i", self.sleep);        // 通知保姆    if ([self.nanny respondsToSelector:@selector(hongBaby:)]) {                [self.nanny hongBaby:self];    }}@end
////  Nanny.h#import 
#import "BabyProtocol.h"@class Baby;@interface Nanny : NSObject
/*// 喂婴儿吃东西- (void)feedFood:(Baby *)baby;// 哄婴儿睡觉- (void)hongBaby:(Baby *)baby; */@end
////  Nanny.m#import "Nanny.h"#import "Baby.h"@implementation Nanny- (void)feedFood:(Baby *)baby{    baby.hungry -= 10;    NSLog(@"喂婴儿吃东西 %i", baby.hungry);}- (void)hongBaby:(Baby *)baby{    baby.sleep += 10;    NSLog(@"哄婴儿睡觉 %i", baby.sleep);}@end
////  Studnet.h#import 
#import "BabyProtocol.h"@class Baby;@interface Studnet : NSObject
/*// 喂婴儿吃东西- (void)feedFood:(Baby *)baby;// 哄婴儿睡觉- (void)hongBaby:(Baby *)baby; */@end
////  Studnet.m#import "Studnet.h"#import "Baby.h"@implementation Studnet- (void)feedFood:(Baby *)baby{    baby.hungry -= 10;    NSLog(@"喂婴儿吃东西 %i", baby.hungry);}- (void)hongBaby:(Baby *)baby{    baby.sleep += 10;    NSLog(@"哄婴儿睡觉 %i", baby.sleep);}@end
////  main.m//  协议的应用场景2-代理设计模式#import 
#import "Baby.h"#import "Nanny.h"#import "Studnet.h"#import "Teacher.h"#import "Dog.h"int main(int argc, const char * argv[]) { // 1.创建婴儿 Baby *b = [Baby new]; // 2.创建保姆 Nanny *n = [Nanny new]; // 3.将保姆赋值给婴儿呢 b.nanny = n; // 4.换保姆 Studnet *stu = [Studnet new]; b.nanny = stu; // 5.再次换保姆 Teacher *tea = [Teacher new]; b.nanny = tea; Dog *d = [Dog new]; b.nanny = d; //4.婴儿发飙 [b food]; [b sleepy]; return 0;}

 

本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7437248.html,如需转载请自行联系原作者

你可能感兴趣的文章
【Oracle 数据迁移】环境oracle 11gR2,exp无法导出空表的表结构【转载】
查看>>
秒杀系统设计方案
查看>>
3D印花芭蕾舞鞋为舞者科学地保护双脚
查看>>
通过ActionTrail监控AccessKey的使用
查看>>
从 JavaScript 到 TypeScript
查看>>
一个mysql复制中断的案例
查看>>
【最佳实践】OSS开源工具ossutil-大文件断点续传
查看>>
Linux常用的服务器构建
查看>>
深入了解 Weex
查看>>
3144: [Hnoi2013]切糕
查看>>
异构数据库
查看>>
iOS.ObjC.Basic-Knowledge
查看>>
iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
查看>>
透视校正插值
查看>>
Cobertura代码覆盖率测试
查看>>
【selenium学习笔记一】python + selenium定位页面元素的办法。
查看>>
Linux禁止ping
查看>>
【Matplotlib】 标注一些点
查看>>
[AX]乐观并发控制Optimistic Concurrency Control
查看>>
自定义类加载器
查看>>