delegate代理设计模式(二十一)

代理模式用我们的话来说,就是我要干一件事,但是我不想干,那么我就找一个人来帮我去干这件事。但是干这件事,要根据我得要求来干,这个要求就是协议,我就是雇主,做事的那个人就是代理人。

在oc中,代理模式,按照顺序注意:

1、需要有代理双方。

2、雇主有需求

3、雇主写协议

4、写实例变量(这个实例变量为id类型,遵守雇主写的协议),添加getter和setter方法。

5、雇主使用代理。

6、代理人签协议

7、代理人遵循协议,

8、代理人完成协议内容。

一个例子:

BFProtocol.h(协议内容,要求别人干什么)


#import <Foundation/Foundation.h>

@protocol BFProtocol <NSObject>

//默认必须

//买饭

- (void)buyFood;

//买饮料

- (void)buyWater;

//挣钱

- (void)makeMoney;

@end

Girl.h(雇主)


#import <Foundation/Foundation.h>

#import "BFProtocol.h"

@interface Girl : NSObject

{

//男朋友,遵循协议

id<BFProtocol> _boyFriend;

}

//getter

- (id)boyFriend;

//setter

- (void)setBoyFriend:(id<BFProtocol>)boyFriend;

//要吃饭

- (void)eating;

//要喝水

- (void)drinking;

//要逛街

- (void)shopping;

@end

Girl.m(雇主要干的事)


#import "Girl.h"

@implementation Girl

//要吃饭

- (void)eating{

//男朋友买饭

[_boyFriend buyFood];

}

//要喝水

- (void)drinking{

[_boyFriend buyWater];

}

//要逛街

- (void)shopping{

[_boyFriend makeMoney];

}

//getter

- (id)boyFriend{

return _boyFriend;

}

//setter

- (void)setBoyFriend:(id<BFProtocol>)boyFriend{

_boyFriend = boyFriend;

}

@end

Boy.h(代理人)


#import <Foundation/Foundation.h>

#import "BFProtocol.h"

//遵循协议

@interface Boy : NSObject<BFProtocol>

@end

Boy.m(代理人实现协议内容)


#import "Boy.h"

@implementation Boy

//实现协议

- (void)buyFood{

NSLog(@"吩咐就是..");

}

- (void)buyWater{

NSLog(@"我去买水..");

}

- (void)makeMoney{

NSLog(@"逛街...");

}

@end

main.m(雇主使用代理)


#import <Foundation/Foundation.h>

#import "Girl.h"

#import "Boy.h"

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

@autoreleasepool {

//创建女孩

Girl *girl = [[Girl alloc]init];

Boy *boy = [[Boy alloc ]init];

//找到男朋友

[girl setBoyFriend:boy];

//提要求

NSLog(@"我要吃饭:");

[girl eating];

NSLog(@"我要喝水..");

[girl drinking];

NSLog(@"我要逛街..");

[girl shopping];

}

return 0;

}

时间: 2024-10-15 16:38:28

delegate代理设计模式(二十一)的相关文章

设计模式 ( 二十一 ):Vistor访问者模式 -- 行为型

1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同. 例子1:顾客在超市中将选择的商品,如苹果.图书等放在购物车中,然后到收银员处付款.在购物过程中,顾客需要对这些商品进行访问,以便确认这些商品的质量,之后收银员计算价格时也需要访问购物车内顾客所选择的商品. 此时,购物车作为一个ObjectStructure(对象结构)用于存储各种类型的商品

云计算设计模式(二十一)——Sharding分片模式

云计算设计模式(二十一)——Sharding分片模式 将一个数据存储到一组水平分区或碎片.存储和访问大量数据时,这个模式可以提高可扩展性. 背景和问题 由一个单一的服务器托管的数据存储区可能会受到以下限制:•存储空间.一种数据存储为一个大型云应用可以预期含有数据量巨大,可以随着时间的推移显著增加.服务器通常提供的磁盘存储仅是有限的,但它可以是能与较大的取代现有的磁盘,或者添加另外的磁盘的机器作为数据量的增加.然而,由此,不能够容易地增加一个给定的服务器上的存储容量的系统最终将达到一个硬限制.•计

【转】设计模式(十一)代理模式Proxy(结构型)

设计模式(十一)代理模式Proxy(结构型) 1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提供一致的接口给某个对象让它可以改变其内部功能,或者是从来不存在的功能? 可以通过引入一个新的对象,来实现对真实对象的操作或者将新的对象作为真实对象的一

28 多线程(二)——静态代理设计模式

引入 在前一节我们学习了实现Runnable接口创建线程,其中提到只使用一次对象时使用匿名对象,如: new Thread(new xxx().start();//xxx为实现了Runnable的类 Thread就是一个静态代理,使用了这种方法,xxx类无需继承Thread类,就可以通过Thread类创建一个线程. Thread就和装饰类的作用相似,都是包装一个对象. 那么,静态代理设计模式的特点就是: 代理者与被代理者都继承同一个接口(Thread与xxx继承的是Runnable接口) 代理者

Swift 学习之二十一:?和 !(详解)

Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值, 也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化 .如果在使用变量之前不进行初始化就会报错: [plain] view plaincopyprint? var stringValue : String //error: variable 'stringValue' used before being initialized //let hashValue = stringValue.hashV

自学iOS开发小功能之五:代理设计模式以及书写规范

一.基本概念 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 代理设计模式:我们买电饭锅之类的,不会亲自到厂家去买,而是在商超等地方购买,而商超就是厂家的代理 应用场合:1.对象B想监听对象A的行为,让对象B成为对象A的代理   2.对象A

UI开发----target/action设计模式和代理设计模式以及手势识别器

//  Created By 郭仔  2015年04月16日21:50:33 眼睛有点痛,视力也在急速下降,心灵之窗,注意保护! ================================================ 耦合是衡量?一个程序写的好坏的标准之?一, 耦合是衡量模块与模块之间关联程度的指标 "?高内聚,低耦合"是?面向对象编程的核⼼心思想: ================ 设计模式思想很重要的 ================== target/action设计模

你真的了解iOS代理设计模式吗?

OS中消息传递方式 在iOS中有很多种消息传递方式,这里先简单介绍一下各种消息传递方式. 通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式. 代理:是一种通用的设计模式,iOS中对代理支持的很好,由代理对象.委托者.协议三部分组成. block:iOS4.0中引入的一种回调方法,可以将回调处理代码直接写在block代码块中,看起来逻辑清晰代码整齐. target action:通过将对象传递到另一个类中,在另一个类中将该对象当做target的方式,来调用该对象方法,从

开发进阶11_代理设计模式_键盘的简单处理

代理设计模式: 1.使用场合 -> A想让B帮忙做一些事情,就让B成为A的代理 ->A想通知一下B发生了某些事情,或者想传递一些数据给B,就让B成为A的代理 ->B想监听A所做的一些事情,就让B成为A的代理 2.使用步骤 ->定义一份协议 ->B要遵守协议,实现相应的方法 ->A中要定义一个代理属性,id<协议> delegate ->创建B对象,设置A的delegate属性为B对象 键盘的简单处理: TextField:keyborad type属性