学习了protocol协议的基本原理和使用方法之后 ,下面就看一下在程序中是怎么体现这种代理思想的。

假定有个人jack需要找一个厨师为自己做饭,当他想要吃饭的时候就可以让厨师给他做好饭。这一需求如何运用protocol代理设计模式解决呢?

分析思路:

首先jack应该有一个吃饭的方法,还拥有一个代理人的属性,并且要求这个代理人要会做饭。这就需要先拟一份协议声明做饭的方法。

只要有人遵守这个协议就可以成为jack的代理人为jack做饭。

下面就来试着编写一下这个程序,只是将框架列出,细节部分暂不实现。

1.在cook.h文件中列出协议并声明做饭的方法

CookMeal.h

#import<Foundation/Foundation.h>

@protocol  cookMeal <NSObject>

- (int)cookMeal;              //协议声明做饭方法

@end

2.创建一个Person类并在Person.h中遵守cookMeal协议

Person.h

#import<Foundation/Foundation.h>

@protocol cookMeal;                         //Person类遵守cookMeal协议

@interface Person:NSObject<cookMeal>

- (void)eat;                                     //Person声明吃饭方法

@property (nonatomic,retain) id<cookMeal>cook;

@end

Person.m

#import"Person.h"

@implementation Person

- (void)eat                     //吃饭方法的实现

{

int n=[_cook  cookMeal];//调用厨师的做饭方法

NSLog(@"今天做了%d道菜",n);

}

- (void)dealloc

{

[_cook release];

[super dealloc];

}

@end

3.上面已经创一个person类并拟定了一份名为CookMeal的protocol协议。

下面只要有一个类能遵守这个协议就可以成为jack的厨师为其做饭了。

Agent.h

#import <Foundation/Foundation.h>

#import"CookMeal.h"                          //Agent类遵守cookMeal协议

@interface Agent:NSObject<cookMeal>

@end

Agent.m

#import"Agen.h"

@implementatio Agent

- (int)cookMeal  //Agent类对协议中做饭方法的实现\

{

return 4;

}

@end

4.上面Agent类遵守了cookMeal协议并实现了协议中的方法,因此就可以成jack的厨师。

main.,m

#import<Foundation/Foundation.h>

#import"Person.h"

#import"Agent.h"

int main()

{

@autoreleasepool{

Person*jack=[[Person allco]init];    //创建jack对象

Agent*cook1=[[Agent alloc]init];    //创建cook1对象

jack.cook=cook1;                          //将cook1给jack当厨师

[jack eat];                                    //jack调用吃饭方法,则要到person.m中找方法的实现。

[cook1 release];

[jack release];

}

return 0;

}

例子通过jack要吃饭调用其吃饭方法,找到厨师cook1,cook1再实现协议中的做饭方法,将做好的n道菜返回给jack。这就实现一次代理式的方法调用 。

这个例子是我对于protocol协议的理解造的。程序中可能会存在一些语言错误或是遗漏,还请斧正。

http://www.itheima.com/

黑马程序员——有关protocol代理模式的举例说明的更多相关文章

  1. 黑马程序员——有关protocol的小结

    在OC程序中经常会有这样的问题就是一个类想让其他类帮自己实现某些方法,然后再将结果返回给这个类:如何让一个类要找的代理去实现自己想要的方法呢? 这样就需要有一个协议,让能遵守协议的其他类都能实现协议中 ...

  2. 黑马程序员:Java基础总结----静态代理模式&动态代理

    黑马程序员:Java基础总结 静态代理模式&动态代理   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public  class  Ts {   ...

  3. 黑马程序员——【Java高新技术】——代理

    ---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...

  4. 黑马程序员:3分钟带你读懂C/C++学习路线

    随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者.而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移 ...

  5. 黑马程序员:Java基础总结----类加载器

    黑马程序员:Java基础总结 类加载器   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...

  6. 黑马程序员:Java基础总结----正则表达式

    黑马程序员:Java基础总结 正则表达式   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import  java.util.regex.*; 符合一定规 ...

  7. 黑马程序员面试宝典(Java)Beta6.0免费下载

    场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? ...

  8. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  9. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

随机推荐

  1. Windows Services windows域账户管理

    windows  域账户管理 一.什么是域账户: 域账户是域是网络对象的分组.例如:用户.组和计算机.域中所有的对象都存储在 Active Directory 下.Active Directory 可 ...

  2. Android 动画 setVisibility 后出错解决方法

    ===先说明下背景. 写的是个ListView 设置 adapter,并在列表末尾显示加载更多,点击 加载更多 时, 变成一个 圆环形的加载动画和 正在加载. 说明下,这个 加载动画是自己做得,一个圆 ...

  3. MongoDB操作(.net)

    一.查询 var doc = new Document(); 1.模糊查询var reg = new MongoRegex(".*" + qry.名称 + ".*&quo ...

  4. Java 互联网工程师要具备哪些技能或技术?

    Java技术的世界是个无底洞,永远也学不完,不废话了,我就简单的说一下自己的看法(偏重Java方面,什么html.css.js这些不在这次的讨论之内,虽然JavaServer开发有时候也都需要懂点): ...

  5. What a version number means

    http://stackoverflow.com/questions/3768261/best-practices-guidance-for-maintaining-assembly-version- ...

  6. 运行时报错 ADB server didn’t ACK

    查看进程中所有和ADB有关的进程,全都结束了,包括什么豌豆荚之类的(大多数情况是占用端口),之后重新启动Eclipse.

  7. HDU 1907 (博弈) John

    参见上一篇博客,里面有分析和结论. #include <cstdio> int main() { int T; scanf("%d", &T); while(T ...

  8. PHP学习笔记03——函数

    <!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...

  9. BZOJ 1911 特别行动队

    另一个版本的斜率优化...这个要好理解一些. #include<iostream> #include<cstdio> #include<cstring> #incl ...

  10. Qt 控制watchdog app hacking

    /************************************************************************** * Qt 控制watchdog app hack ...