(转载)OC学习篇之---代理模式
在前一篇文章我们介绍了OC中的协议的概念,这篇文章我们就来介绍一下OC中的代理模式,关于代理模式,如果还有同学不太清楚的话,就自己去补充知识了,这里就不做介绍了,这里只介绍OC中是如何实现代理模式的。
这里举一个简单的例子:
小孩类,护士类,保姆类,其中小孩类有两个方法:wash和play
这里代理对象就是:护士类、保姆类,小孩类是被代理对象。
看一下代码:
首先看一下小孩类:
Children.h
//
// Children.h
// 12_DesignStyle
//
// Created by jiangwei on 14-10-11.
// Copyright (c) 2014年 jiangwei. All rights reserved.
// #import <Foundation/Foundation.h> @class Children;//如果没有这行代码的话,协议ChildrenDelegate中得Children类型就会查找不到,报错 @protocol ChildrenDelegate <NSObject> @required
- (void)wash:(Children *)children;
- (void)play:(Children *)children; @end @interface Children : NSObject{ //Nure *_nure;//保姆
//这里可以使用多态技术实现,因为保姆,护士有共同的父类NSObject,但是这里不使用这种方式,而是使用id类型
//但是我们还需要为这个类型添加一些方法,这里就用到了协议
//这个代理对象必须遵从ChildrenDelegate协议
id<ChildrenDelegate> _delegate;//这个变量就是小孩的代理对象
NSInteger timeValue;
} -(void)setDelegate:(id)delegate; @end
这里,我们定义了一个协议:ChildrenDelegate,他有两个必要的方法:wash和play。
我们还定义了一个很重要的属性:
_delegate
这个属性定义有点不一样,这个就是实现代理对象的精髓所在了,id是不确定类型,所以这个_delegate变量可以被赋值为的类型是:只要实现了ChildrenDelegate协议的类就可以了。这里就记住了,以后这种定义方法后面会用到很多。相当于Java中的接口类型,只能赋值其实现类的类型。只是这里的定义格式为:id<协议名>
然后就是一个设置协议的方法了,注意参数类型也必须是id的。
其实这里面也牵涉到了之前说到的多态特性,所以说代理模式也是建立在多态的特性上的。
Children.m
//
// Children.m
// 12_DesignStyle
//
// Created by jiangwei on 14-10-11.
// Copyright (c) 2014年 jiangwei. All rights reserved.
// #import "Children.h" //这里用到了保姆的一些动作
//假如现在想请一个护士,那么我们又要去从新去请一个护士,那么这里面代码需要改,把保姆的地方换成护士的地方
//产生的原因就是因为耦合度太高了,保姆和孩子耦合在一起,如果需要换的话,就需要改动代码
//
@implementation Children - (id)init{
self = [super init];
if(self != nil){
[NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
}
return self;
} -(void)setDelegate:(id)delegate{
_delegate = delegate;
} - (void)timerAction:(NSTimer *)timer{
timeValue++;
if(timeValue == ){
[_delegate wash:self];
}
if(timeValue == ){
[_delegate play:self];
}
} @end
我们自定义了一个初始化方法,在初始化方法中我们做了一个定时器的工作。
[NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
这个就是OC中启动一个简单的计时器:每隔1s中就去执行一次self中的timerAction方法。
OC中的定时器和java不一样,他的执行逻辑可以单独的在一个指定的方法中去做(C中的函数指针差不多,只要传递一个函数指针过来,就可以执行指定的函数,所以@selector做的工作就是这个),但是Java中必须实现Runable接口,在run方法中执行指定的逻辑代码。
在timerAction方法中,我们是判断当时间到5s了,就执行代理对象的wash方法,10s的时候执行play方法。
在来看一下护士类:
Nure.h
//
// Nure.h
// 12_DesignStyle
//
// Created by jiangwei on 14-10-11.
// Copyright (c) 2014年 jiangwei. All rights reserved.
// #import <Foundation/Foundation.h> #import "Children.h" @interface Nure : NSObject<ChildrenDelegate> - (void)wash:(Children *)children;
- (void)play:(Children *)children; @end
护士类很简单,实现ChildrenDelegate协议。
Nure.m
//
// Nure.m
// 12_DesignStyle
//
// Created by jiangwei on 14-10-11.
// Copyright (c) 2014年 jiangwei. All rights reserved.
// #import "Nure.h" #import "Children.h" @implementation Nure - (void)wash:(Children *)children{
NSLog(@"小孩脏了,保姆帮小孩洗澡");
} - (void)play:(Children *)children{
NSLog(@"小孩哭了,保姆和小孩玩耍");
} @end
在这里就去实现wash和play方法了。
来看一下保姆类:
Nanny.h
//
// Nanny.h
// 12_DesignStyle
//
// Created by jiangwei on 14-10-11.
// Copyright (c) 2014年 jiangwei. All rights reserved.
// #import <Foundation/Foundation.h> #import "Children.h" @interface Nanny : NSObject<ChildrenDelegate> - (void)wash:(Children *)children;
- (void)play:(Children *)children; @end
Nanny.m
//
// Nanny.m
// 12_DesignStyle
//
// Created by jiangwei on 14-10-11.
// Copyright (c) 2014年 jiangwei. All rights reserved.
// #import "Nanny.h" #import "Children.h" @implementation Nanny - (void)wash:(Children *)children{
NSLog(@"小孩脏了,护士帮小孩洗澡");
} - (void)play:(Children *)children{
NSLog(@"小孩哭了,护士和小孩玩耍");
} @end
保姆类和护士类的代码逻辑是一样的,因为他们两个都是实现了一个协议。
测试类:
main.m
//
// main.m
// 12_DesignStyle
//
// Created by jiangwei on 14-10-11.
// Copyright (c) 2014年 jiangwei. All rights reserved.
// #import <Foundation/Foundation.h> #import "Children.h"
#import "Nure.h"
#import "Nanny.h" //核心:id类型+协议
//做到低耦合操作
//同时也可以做到两个类之间的通信 int main(int argc, const charchar * argv[]) {
@autoreleasepool {
Children *child = [[Children alloc] init]; Nure *nure = [[Nure alloc] init];
Nanny *nanny= [[Nanny alloc] init]; [child setDelegate:nanny];
// [child setNure:nure]; [[NSRunLoop currentRunLoop] run];
}
return ;
}
看到了,测试类很简单。我们也发现了,代理模式的好处也是显现出来了,比如现在又来了一个人来照顾孩子:妈妈类,那么我们只要让妈妈类实现那个协议即可。这种耦合度也不会很高。所以代理模式还是超级有用的,而且我们后面在开发IOS的时候,会发现他里面用到的代理模式很多的。
运行结果:
aaarticlea/png;base64,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" alt="" />
总结
这一篇就介绍了OC中如何实现代理模式,其实OC中的代理模式核心技术是:id类型+协议+多态。
(转载)OC学习篇之---代理模式的更多相关文章
- OC学习篇之---代理模式
何实现代理模式的. 这里举一个简单的例子: 小孩类,护士类,保姆类,其中小孩类有两个方法:wash和play 这里代理对象就是:护士类.保姆类,小孩类是被代理对象. 看一下代码: 首先看一下小孩类: ...
- oc学习之路----代理模式
今天刚学完oc的代理模式,觉得有点新奇,第一次接触,原理 A完成一件事,但是自己不能完成,于是他找个代理人B 替他完成这个事情,他们之间便有个协议 (protocol),B继承该协议来完成A代理给他的 ...
- oc学习之路----代理模式2-使用步骤
之前已经写过一个个人关于代理模式的一些看法,现在就来总结一下使用代理模式的步骤吧. 1.先搞清楚谁是谁的代理(delegate) ● 2.定义代理协议,协议名称的命名规范:控件类名 + Delegat ...
- OC学习篇之---总结和学习目录
今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生 ...
- OC学习篇之---单例模式
在之前的一片文章中介绍了对象的拷贝相关知识:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天我们来看一下OC中的单 ...
- (转载)OC学习篇之---Foundation框架中的NSObject对象
前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套a ...
- (转载)OC学习篇之---概述
前言 终于开启了OC的学习篇了,之前由于工作上的事,学习就一直搁浅了,不过最近由于各种原因,感觉必须要开启iOS的开发旅程了,不然就老了.因为之前一直是做Android的,所以学习iOS来就没那么费劲 ...
- [转载]JavaEE学习篇之——JDBC详解
原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/26164629 目录1.摘要2.JDBC的使用步骤 1.注册驱动 只做一次 ...
- JAVA学习篇--静态代理VS动态代理
本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢? 原因: 1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者 ...
随机推荐
- 由阿里巴巴笔试题看java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- 验证码图片生成工具类——Captcha.java
验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. 源码如下:(点击下载 Captcha.java) import java. ...
- 每天一个小算法(Shell sort5)
希尔排序的关键在于步长的选取. 希尔排序的复杂度比较复杂,主要跟步长的选择有关,大概是 O(n logn^2),一般认为就是介于 O(n^2) 和 O(n logn) 之间.最好步长比较复杂,一般第一 ...
- BZOJ 1502 月下柠檬树(simpson积分)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1502 题意:给出如下一棵分层的树,给出每层的高度和每个面的半径.光线是平行的,与地面夹角 ...
- HDU 4726 Kia's Calculation(贪心构造)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4726 题意:给出两个n位的数字,均无前缀0.重新排列两个数字中的各个数,重新排列后也无前缀0.得到的两 ...
- shader复杂与深入:Normal Map(法线贴图)1
转自:http://www.zwqxin.com/archives/shaderglsl/review-normal-map-bump-map.htmlNormal Map法线贴图,想必每个学习计算机 ...
- Microsoft.ACE.OLEDB.12.0 错误 上传读取Excel错误
使用"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";&quo ...
- R语言 rwordseg包的下载
在CRAN中没有,如果通过R下载经常会出错,使用以下地址下载后加载本地包 http://R-Forge.R-project.org/bin/windows/contrib/3.0/Rwordseg_0 ...
- eclipse中字母大小写转换快捷键
ctrl+shift+x 转为大写 ctrl+shift+y 转为小写
- 深入理解OpenERP的工作流(Workflow)
一.工作流定义: <?xml version="1.0"?> <terp><data> <record model="w ...