OC 代理模式

一 代理模式概念

传入的对象,代替当前类完成了某个功能,称为代理模式

二 代理模式规范

1.协议名的规范
@protocol ClassNameDelegate<NSObject>
    -(void)functionName;
@end

ClassName 需要其他类实现的功能,都声明在同一个协议中。

2.类声明的规范
@interface ClassName:NSObject
    //设置代理属性
    @property (nonatomic,strong)id<ClassNameDelegate>delegate;
@end

三 代码

类说明:Doctor Sick

协议:SickDelegate

1.SickDelegate
#import <Foundation/Foundation.h>

@protocol SickDelegate <NSObject>
@required
-(void)cure;
@end
2.Doctor
===类声明===
#import <Foundation/Foundation.h>
#import "SickDelegate.h"

@interface Doctor : NSObject<SickDelegate>
@property(nonatomic,strong)NSString *name;
@end

===类实现===
#import "Doctor.h"

@implementation Doctor

/**
 *  实现协议方法
 */
-(void)cure
{
    NSLog(@"%@ sure...", self.name);
}
@end
3.Sick
===类实现===
#import <Foundation/Foundation.h>
#import "SickDelegate.h"
@interface Sick : NSObject
/**
 *  属性
 */
@property (nonatomic, strong) NSString *name;

/**
 *  代理
 */
@property (nonatomic, strong)id<SickDelegate> delegate;

/**
 *  生病
 */
-(void)ill;
@end

===类声明===
#import "Sick.h"

@implementation Sick

/**
 *  生病
 */
-(void)ill
{
    //通过代理调用 看病 方法
    [self.delegate cure];
}
@end
四.主函数
#import <Foundation/Foundation.h>
#import "Doctor.h"
#import "Sick.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        /**
         * 患者类
         */
        Sick *joker = [Sick new];
        [email protected]"joker";
        
        /**
         * 医生类
         */
        Doctor *rose = [Doctor new];
        [email protected]"rose";
        
        //绑定代理 让rose 为 joker 看病
        joker.delegate=rose;
        [joker ill];
        
    }
    return 0;
}

===输出===
2014-11-16 23:42:11.736 代理模式[1209:303] rose sure...
时间: 2024-08-27 15:30:00

OC 代理模式的相关文章

OC学习篇之---代理模式

在前一篇文章我们介绍了OC中的协议的概念:http://blog.csdn.net/jiangwei0910410003/article/details/41776015,这篇文章我们就来介绍一下OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的. 这里举一个简单的例子: 小孩类,护士类,保姆类,其中小孩类有两个方法:wash和play 这里代理对象就是:护士类.保姆类,小孩类是被代理对象. 看一下代码: 首先看一

黑马程序员_ 利用oc的协议实现代理模式

先说下代理模式是什么吧 定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象 而代理对象可以在客户端和目标对象之间起到中介的作用. 在看过李明杰老师的课程后,我对代理模式有了最初步的理解,虽然还很浅显 但是也明白了代理模式的 一些作用跟用法.首先使用代理模式可以降低耦合度.大大的增强了代码的弹性. 举个例子,小明想看电影,但是没时间买票 于是就拜托小强去买票 最简单的方式就是 建立一个person类(小明) 一个agent类(代理类) ag

oc学习之路----代理模式

今天刚学完oc的代理模式,觉得有点新奇,第一次接触,原理 A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议 (protocol),B继承该协议来完成A代理给他的事情 步骤,先在类A中写一个协议,在协议中声明一些方法,并且在属性中声明一个代理属性,这个属性id<协议>让我想起jquery,我觉得像是过滤掉一些类,也就是说不是任何一个类都可以作为A类的代理,必须实现协议,并继承(不知道用词恰当不恰当),协议的一些方法,至于为什么,我是这样理解的,由于类A中的

(转载)OC学习篇之---代理模式

在前一篇文章我们介绍了OC中的协议的概念,这篇文章我们就来介绍一下OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的. 这里举一个简单的例子: 小孩类,护士类,保姆类,其中小孩类有两个方法:wash和play 这里代理对象就是:护士类.保姆类,小孩类是被代理对象. 看一下代码: 首先看一下小孩类: Children.h 1 // 2 // Children.h 3 // 12_DesignStyle 4 // 5

OC中的代理模式

OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的.这里举一个简单的例子:小孩类,护士类,保姆类,其中小孩类有两个方法:wash和play这里代理对象就是:护士类.保姆类,小孩类是被代理对象.看一下代码:首先看一下小孩类:Children.h[objc]  view plaincopy 1. //   2. //  Children.h   3. //  12_DesignStyle   4. //   5. //

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

1.代理模式 举个例子:有一个婴儿,他本身不会自己吃饭和洗澡等等一些事情,于是婴儿就请了一个保姆,于是婴儿和保姆之间商定了一个协议,协议中写明了保姆需要做什么事情,而保姆就是这个代理人,  即:婴儿和保姆之间有个协议,保姆继承该协议,于是保姆就需要实现该协议中的条款成为代理人.2.代理模式的关键点: A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议(protocol),B继承该协议来完成A代理给他的事情. 3.病人找医生看病 的案例: SickProtoc

[oc学习日记]代理模式

何为代理模式,代理模式也成委托模式 代理模式顾名思义,就是一个人让另一个个人帮助他做某事 我们下面就用一个代购的故事为大家讲解代理模式 1.首先我们要创建一个协议,该协议具有具体功能(代购的功能) 1 #import <Foundation/Foundation.h> 2 //声明协议 3 @protocol delegate <NSObject> 4 //协议中代购的方法 5 -(void)buy; 6 @end 2.谁可以实现这个功能,就让这个类去遵循这个协议(在这个例子中,代

oc学习之路----代理模式2-使用步骤

之前已经写过一个个人关于代理模式的一些看法,现在就来总结一下使用代理模式的步骤吧. 1.先搞清楚谁是谁的代理(delegate) ● 2.定义代理协议,协议名称的命名规范:控件类名 + Delegate ● 3.定义代理方法 Ø代理方法一般都定义为@optional Ø代理方法名都以控件名开头 Ø代理方法至少有1个参数,将控件本身传递出去 Ø 4.设置代理(delegate)对象  (比如myView.delegate = xxxx;) Ø代理对象遵守协议 Ø代理对象实现协议里面该实现的方法 Ø

蓝懿IOS委托模式代理模式

今天刘国斌老师讲了有关oc语言里的委托模式(代理模式),通过了一个打地鼠的游戏讲解了委托模式的功能作用,之后连带讲解了协议的书写和使用. 打地鼠功能包括屏幕随机出现地鼠,点击消失,如果不点击5秒后自动消失,屏幕右上角有一个label显示点击的数量:编写思维是,首先在文件里粗昂见一个类,在类里重写init方法,加上每.5秒出现的事件,倒入viewcontroler文件,在地鼠类里声明一个属性delegate,在button点击事件加上创建对象点delegate调用viewcontroler里的加分