【非凡程序员】 OC第十四节课 (代理模式)

1.代理模式

举个例子:有一个婴儿,他本身不会自己吃饭和洗澡等等一些事情,于是婴儿就请了一个保姆,于是婴儿和保姆之间商定了一个协议,协议中写明了保姆需要做什么事情,而保姆就是这个代理人,  即:婴儿和保姆之间有个协议,保姆继承该协议,于是保姆就需要实现该协议中的条款成为代理人。
2.代理模式的关键点:

A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议(protocol),B继承该协议来完成A代理给他的事情。

3.病人找医生看病 的案例:

SickProtocol.h文件

#import <Foundation/Foundation.h>

@protocol sickDelegate <NSObject>
//这个协议方法为治病,只能医生有治病这个能力,Sick病人没有
- (void) cure;

@end

#import <Foundation/Foundation.h>
#import "SickProtocol.h"

@interface Sick : NSObject

@property(nonatomic, assign)NSString *name;
@property(nonatomic, strong)id<sickDelegate> delegate; (重点)
- (void) ill;

@end

Sick.h文件

#import "Sick.h"

@implementation Sick

- (void) ill
{
    NSLog( @"医生我生病了...");
    //因为我说出了自己的病情 医生开始给我治病 _delegate 医生(重点)

[_delegate cure];
}

-(void) dealloc{
    NSLog( @"Sick dealloc %@", _name );
}

@end

Sick.m文件

#import "Sick.h"

@implementation Sick

- (void) ill
{
    NSLog( @"医生我生病了...");
    //因为我说出了自己的病情 医生开始给我治病 _delegate 医生
    [_delegate cure];
}

@end

Doctor.h文件

#import <Foundation/Foundation.h>
#import "SickProtocol.h"

@interface Doctor : NSObject <sickDelegate>

@property(nonatomic, assign) NSString *name;

@end

Doctor.m文件

#import "Doctor.h"

@implementation Doctor

- (void) cure
{
    NSLog( @"%@医生 :开始治病..", _name);
}
@end

main函数文件
#import <Foundation/Foundation.h>
#import "Doctor.h"
#import "Sick.h"

//代理模式:委托 ,委托其他的对象实现相关的功能,一般会有协议 protocol
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        //现在我生病了
        Sick *sick = [[Sick alloc]init];
        sick.name = @"Mr.Du";
        //医院给我推荐了一个医生
        Doctor *doctor = [[Doctor alloc]init];
        doctor.name = @"Rose";
       
        //我找到了医生
        sick.delegate = doctor;
        //说出了自己的病情
        [sick ill];
       
    }
    return 0;
}

时间: 2024-08-10 05:05:31

【非凡程序员】 OC第十四节课 (代理模式)的相关文章

【非凡程序员】 OC第十四节课 (代理模式 二 闹铃响了)

这是一个人定闹钟的例子,就是人委托闹钟叫醒自己 main函数: #import <Foundation/Foundation.h>#import "Person.h"#import "Clock.h" int main(int argc, const char * argv[]) {    @autoreleasepool  {        // insert code here...        NSLog(@"Hello, World!

【非凡程序员】 OC第十一节课 (协议)

//协议特点:制定一份协议,其他类如果遵守就需要去实现前提是required(默认)// < > 遵守// NSObject 既是基协议 又是基类,因此,协议最终都需遵守NSObject// required 必须实现  optional 可选实现// respondToSelector:@selector(方法名) 判断一个方法是否存在// 子类继承父类 那么子类也遵守父类的协议// 协议可以多遵守,如: <myProtocol , NSObject>// 警记! 协议只是类似方

centos LNMP第二部分nginx、php配置 第二十四节课

centos  LNMP第二部分nginx.php配置  第二十四节课 上半节课 下半节课 f

centos 监控cacti/nagios/zabbix 第三十四节课

centos   监控cacti/nagios/zabbix   第三十四节课 上半节课 下半节课 f

centos mysql 优化 第二十四节课

centos mysql  优化  第二十四节课 f

【非凡程序员】 OC第十五节课 (观察者模式和KVO进行对比)

今天主要学了观察者模式,以及回顾复习了KVO,两者进行对比 什么是观察者模式? 我们先打个比方,这就像你订报纸.比如你想知道美国最近放生了些新闻,你可能会订阅一份美国周刊,然后一旦美国有了新的故事,美国周刊就发一刊,并邮寄给你,当你收到这份报刊,然后你就能够了解美国最新的动态.其实这就是观察者模式,A对B的变化感兴趣,就注册为B的观察者,当B发生变化时通知A,告知B发生了变化.这是一种非常典型的观察者的用法,我把这种使用方法叫做经典观察者模式 KVO的全称是Key-Value Observer,

奋斗吧,程序员——第三十四章 挥泪别痴心,只怨情长天未怜【上半部完】

那天后来发生的事让我下巴差点掉在地上. 我虽然成功帮他引开了恐龙,但其实也没指望他能搭上美女. 没想到老四超常发挥,跟美女逛了一天街后,居然去开了房. 那美女是音乐系的,怪不得长得漂亮. 至此以后老四一直对那美女念念不忘,倒是人美女貌似只是想做一回露水夫妻而已,表示不必再联系. 不是我不明白,这世界变化快. 蒋小涵的邀请我最后还是拒绝了,没有说为什么. 彪悍的人生不需要解释. 她又提出晚上一起去唱歌,和她在一起,似乎每次的活动都是唱歌. 其实我不是很喜欢KTV的环境,情愿安安静静地煮一壶茶,聊聊

第十四节课:第13章,部署DNS域名解析服务(bind服务)

(借鉴请改动)  第十二章收尾  12.2.nfs网络文件系统 RHEL7默认安装了nfs,配置文件在  /etc/export  写入格式:共享目录    允许的客户端(参数)  ro                       //只读  rw                      //读写   root_squash         //当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 no_root_squash     //当NFS客户端以root管理员访问时,映

设计模式(十四):代理模式

一.概述 代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问.其实就是代理就是做到类似转发的功能,针对不同代理,转发的具体实现不同. 二.解决问题 从原理知道他就是控制客户对一个对象的访问,它跟现实中的中介代理类似,只是作为代表做一些受理工作,真正执行的并不是它自己.比如买火车票,外面有很多火车票代理点,我们直接去代理点买票就好而不用跑到火车票买了(暂时不考虑网购哈). 三.结构类图 四.应用实例 在这个例子中,主要讲解远程代理,它可以作为另一个JVM上的本地代表.客户端调用代理的方