委托和接口的相似点

委托和接口都允许类的设计者将声明和实现分离开来,一个给定的接口可以被任何类或结构体继承和实现;也可以为任何类的方法创建对应的委托,只要该方法满足委托的签名,委托和接口可以被一个对象使用,这个对象不必关心实现委托和接口的细节,有了这些相似点,我么什么时候使用委托?什么时候使用接口呢?

使用委托的情况

  • 使用了基于事件的设计模式
  • 封装静态方法
  • 调用者无需访问实现方法的对象的其他内容,比如属性,方法或接口
  • 简单的组合
  • 一个类想要方法的多种实现

使用接口的情况

  • 一组相关的方法需要被调用
  • 只需要方法的一种实现
  • 需要将接口转换为其他接口或类
  • 被实现的方法链接到类中的某个类型,比如comparison方法

有一个使用只包含单个方法的接口而不是委托的好例子,那就是IComparable或声明了CompareTo方法的IComparable.IComparable,该方法返回一个整型值来表示两个同类型对象间的关系,大于,等于或者是小于。IComparable可以用作排序算法的基本比较函数,当然使用委托也可以,但是并不理想,因为比较的实现取决于类,并且比较算法运行时并不改变,一个单方法的接口就很理想。

original http://msdn.microsoft.com/en-us/library/ms173173%28v=vs.80%29.aspx

转载于:https://www.cnblogs.com/graphics/archive/2011/02/21/1959451.html

何时使用Delegate,何时使用Interface相关推荐

  1. JAVA设计模式-委派模式(Delegate)

    委派模式不是23种设计模式中的设计模式,它是比较常见的 场景:老板-项目经理-开发人员 老板向项目经理下达任务,项目经理让开发人员去实现(需要拿到开发人员的引用,代理模式),但是选择具体哪个开发人员是 ...

  2. 系统SDK介绍-02

    系统SDK介绍 打开相册选择图片 打开相册选择视频 打开相机拍摄图片 打开相机拍摄视频 配置权限: 在info.plist文件中添加需要的权限 相机权限:Privacy - Camera Usage ...

  3. webview重新加载(reload)或者发起 redirect request导致js和objc代码之间的bridge失联解决方案(亲测有效)...

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationTy ...

  4. C#中的类型~存储~变量

    欢迎您成为我的读者,希望这篇文章能给你一些帮助. 前言 今天在群里看到朋友讨论把粉丝称为读者,这让我内心特别激动. 以前我还是比较关注自己的文章阅读量,有没有人转发,今天新增多少个关注.而现在,我的关 ...

  5. iPhone程序运行流程浅谈

    1. 和大多数语言一样,每一个iPhone应用也都是从主函数开始运行,它的main函数都在XCode的Other Reasource逻辑目录下. [cpp] view plaincopyprint? ...

  6. (译)如何使用GameCenter制作一个简单的多人游戏教程:第一部分

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  7. [oc学习日记]代理模式

    何为代理模式,代理模式也成委托模式 代理模式顾名思义,就是一个人让另一个个人帮助他做某事 我们下面就用一个代购的故事为大家讲解代理模式 1.首先我们要创建一个协议,该协议具有具体功能(代购的功能) 1 ...

  8. Modal View Controllers, Not Model-View-Controller(MVC)

    http://useyourloaf.com/blog/2010/5/3/ipad-modal-view-controllers.html 非常好的一篇文章. There were some mino ...

  9. iOS - 内存管理

    一.App 内存分布 二.OC对象的内存管理 iOS 中,使用引用计数来管理 OC 对象的内存,新创建的 OC 对象引用计数默认是1,当引用计数减为0,OC对象就会销毁,释放其占用的内存空间.调用 r ...

  10. iOS GameCenter 挑战,排名

    你也许曾听说过Game Center,它是自打iOS 4.1被引入的在线多人社交游戏网络,支持玩家邀请好友一起玩儿游戏,还可以建立一个多人游戏的会话,追踪成就系统,以及其他功能. 除了可以让开发者更轻 ...

最新文章

  1. 实战篇:Security+JWT组合拳 | 附源码
  2. asp.net 生成下载word的两种方式
  3. Gradle之FTP文件下载
  4. 华中科技大学应用高等工程数学_专业解析【第152期】| 机械电子工程课程设置及研究方向...
  5. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
  6. Java8 Stream详解~收集(collect)
  7. Windows版nacos启动报错(nacos安装路径问题)
  8. 线程池最佳线程数量到底要如何配置?
  9. Direct3D顶点结构使用总结
  10. mysql5.5.50安装包_影视混剪每天收入400多??总结了50多款软件
  11. 转分享[Mac] QQ音乐Mac特别版 可以下载无损
  12. siamfc代码解读_每日一文:目标跟踪(SiamFC)
  13. 将IDM添加到谷歌浏览器
  14. UI面试官的哪些问题让你感觉很高明?
  15. 地籍测量类毕业论文文献有哪些?
  16. 面试被问到【未来3-5年的职业规划】,到底该怎么回答?
  17. 写一函数,将一个3*3的整型矩阵转置。
  18. Redis从入门到精通(二)
  19. 中国历届亚运会成绩排名(金牌数)
  20. 基于SSH的校园二手物品交易系统

热门文章

  1. 【必看】如何在 Linux 上恢复误删除的文件或目录
  2. 云拨测助力节卡机器人 全面优化海外网站性能
  3. 托管节点池助力用户构建稳定自愈的 Kubernetes 集群
  4. java ant 安装成功_Ant学习---第一节:Ant安装和简单使用
  5. httpd是mysql_在Centos下安装httpd、php、Mysql并配置(转载)
  6. vue 实现动态增加输入框_vue实现一个6个输入框的验证码输入组件
  7. rest 接口怎么传list_如何设计一个优雅的RESTFUL的接口
  8. tensorflow学习(2.网络模型的存储以及提取)
  9. 【项目实战课】快速上手目标检测任务,MMdetection框架详细解读与案例实战
  10. 【阿里云课程】网络深度与宽度如何影响模型性能,如何设计