委托模式

//个人理解:委托就是自己不想干的事,来让别人来干。这里名词是委托方和被委托方者,被委托者收到委托来帮委托者来做事(小弟帮大哥大做事

//我们一般用到委托是在被委托者的.h内声明一个协议和对应的协议方法,那么谁遵循了协议谁就是委托者

//好处是:回调传值;

//用到一个例子阐述一下委托的具体含义:租客想让中介帮他找到一处房子

//在main函数内

#import <Foundation/Foundation.h>

#import "Buyer.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Buyer *buyer = [[Buyer alloc] init];

[buyer findMediation];

}

return 0;

}

//创建一个租客类

#import <Foundation/Foundation.h>

#import "Mediation.h"

@interface Buyer : NSObject<PaymentDelegate>//遵循声明的协议    那么就成为了委托者;

-(void)findMediation;

@end

 //租客类的.m文件内

#import "Buyer.h"

@implementation Buyer

-(void)findMediation{

NSLog(@"我需要房源");

Mediation *m = [[Mediation alloc] init];

m.delegate = self;//告诉他是遵循了这个协议的对象

[m handle];

}

//协议方法的实现,伴随着回调传值

-(void)payment:(float)money{

NSLog(@"付钱:%.2f",money);

}

//输出结果为:付钱:10

@end

//在被委托者的声明文件(.h)中进行协议的声明

#import <Foundation/Foundation.h>

@protocol PaymentDelegate <NSObject>//声明的协议

-(void)payment:(float)money;//协议方法的声明;

@end

@interface Mediation : NSObject

@property (nonatomic, weak) id<PaymentDelegate> delegate;//遵循协议的对象;

-(void)handle;

@end

//创建一个中介类,也就是被委托者

//在被委托者的声明文件(.h)中进行协议的声明

#import <Foundation/Foundation.h>

@protocol PaymentDelegate <NSObject>//声明一个协议

-(void)payment:(float)money;//声明的协议的方法;

@end

@interface Mediation : NSObject

@property (nonatomic, weak) id<PaymentDelegate> delegate;//遵循协议的对象;

-(void)handle;

@end

//在中介的.m文件内部

#import "Mediation.h"

@implementation Mediation

-(void)handle{

NSLog(@"找到房源,请给钱");

[_delegate payment:10.0];//这是谁遵循协议谁就调用协议方法;回调方法传值;

}

@end

时间: 2024-12-25 07:20:28

委托模式的相关文章

委托模式精讲

委托的作用有两个,一个是传值,一个是传事件. 委托用到的最多的用途 回传值(回调) 当我们声明了遵循的协议的属性时,属性的关键字要用weak或者assign,目的是为了避免循环引用 委托模式,它的特点是,一对一 用途是用在有上下级关系的两个view,不能跨级调用 例如:ReadViewController这个类里面是一个阅读小说的界面,现在有个需求:想改变小说的背景颜色和字体颜色,而它本身有不想做这件事,这是它就会找个代理SetViewController,帮他完成这一转变. #import "

[js高手之路]设计模式系列课程-委托模式实战微博发布功能

在实际开发中,经常需要为Dom元素绑定事件,如果页面上有4个li元素,点击对应的li,弹出对应的li内容,怎么做呢?是不是很简单? 大多数人的做法都是:获取元素,绑定事件 1 <ul> 2 <li>跟着ghostwu学习javascript设计模式的应用1</li> 3 <li>跟着ghostwu学习javascript设计模式的应用2</li> 4 <li>跟着ghostwu学习javascript设计模式的应用3</li&g

android深入之设计模式(一)委托模式

(一)委托模式简介 委托模式是基本的设计模式之一.委托,即是让另一个对象帮你做事情. 许多其他的模式,如状态模式.策略模式.访问者模式本质上是在更特殊的场合采用了委托模式. 委托模式使得我们可以用聚合来替代继承,java-组合优于继承. 最简单的java委托模式 class RealPrinter { void print() { System.out.println("real printer"); } } class Printer { RealPrinter realPrinte

[objective-c] 05 - 委托模式回调

本章主要讲解委托模式以及通过委托模式实现的回调接口. 1.委托模式 委托模式是OC语法独有的开发模式.是基于组件拼装的一种快速开发模式.该模式下,可以保证组件的高度灵活性和通用性.属于组件的一种开放式接口. 下面通过一个现实生活中的场景简单理解下委托模式的应用. 例如我们现在有一个公司.公司想要进行IPO.可是公司老总并不熟悉资本操作,这时候就需要委托一个人或者一个机构来作这件事. 公司首先要提出能做IPO这件事的详细要求,然后通过猎头寻找合适的人选. 用代码描述应该是这样的: 首先用协议描述公

php设计模式之委托模式

使用委托模式目的是消除潜在的.难以控制的if/else语句. <?php /** * 原来的程序写法 * @var playlist */ $playlist = new playlist(); $playlist->addSong('/home/aaron/music/aa.mp3', 'Brr'); $playlist->addSong('/home/aaron/music/bb.mp3', 'GoodBye'); if ($extType == 'pls') { $playlist

蓝懿IOS委托模式代理模式

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

IOS常用设计模式——委托模式(IOS开发)

委托模式在之前的博客中用到了很多,比如各种复杂的Cocoa Touch框架的UI控件,几乎都用到了委托来响应控件事件或控制其他对象. 委托模式 -问题: 处理一切IOS应用都在UIApplication中完成,但是在设计过程中并不友好,它藕合度高,职责不清,难以维护,需要不断不断的重构,因此需要把看似功能很复杂的类分解或者分派成功能明确的类. Apple中我们经常用两种类,一个是框架类,各种用,不断的用,啥都能用:另一个就是协议类,就是协议. 协议的目的,终究是降低一个对象的复杂度和藕合度.框架

iOS.常用设计模式.02.委托模式

WTDelegate #import <Foundation/Foundation.h> @protocol WTDelegate <NSObject> @required - (void)sleep; - (void)eat; - (void)work; @end WTPhilosopher.h #import <Foundation/Foundation.h> #import "WTDelegate.h" @interface WTPhiloso

android classloader双亲委托模式

概述 ClassLoader的双亲委托模式:classloader 按级别分为三个级别:最上级 : bootstrap classLoader(根类加载器) : 中间级:extension classLoader (扩展类加载器) 最低级 app classLoader(应用类加载器). 根(Bootstrap)类加载器:该加载器没有父加载器.它负责加载虚拟机的核心类库,如java.lang.*等.例如java.lang.Object就是由根类加载器加载的.根类加载器从系统属性sun.boot.

设计模式--委托模式C++实现

原文章地址:http://www.cnblogs.com/zplutor/archive/2011/09/17/2179756.html [委托模式 C++实现] 我对.Net的委托模型印象很深刻,使用委托,可以快速实现观察者模式,免去写很多繁杂重复的代码.遗憾的是,C++并没有提供这样的模型,为了达到相似的目的,需要继承一个类并重写virtual方法,这种做法需要写很多代码,效率比较低下(使用过MFC的应该都能体会到).然而,在强大的C++面前,没有什么是不可能的,已经有很多人针对这个问题进行