Swift 的 POP

  首页最新文章IT 职场前端后端移动端数据库运维其他技术- 导航条 -首页最新文章IT 职场前端- JavaScript- HTML5- CSS后端- Python- Java- C/C++- PHP- .NET- Ruby- Go移动端- Android- iOS数据库运维- Linux- UNIX其他技术- Git- 机器学习- 算法- 测试- 信息安全- Vim

  伯乐在线 > 首页 > 所有文章 > 开发 > 从 Swift 的面向协议编程说开去从 Swift 的面向协议编程说开去

  2016/11/21 · 开发 · 多继承, 面向协议, 面向对象

  分享到:0Android Data Binding实战-入门篇轻松学会Laravel-表单篇初识机器学习-理论篇JSON快速入门(Java版)本文作者: 伯乐在线 - bestswifter 。未经作者许可,禁止转载!

  欢迎加入伯乐在线 专栏作者。

  写在最前

  文章标题谈到了面向协议编程(下文简称 POP),是因为前几天阅读了一篇讲 Swift 中 POP 的文章。本文会以此为出发点,聊聊相关的概念,比如接口、mixin、组合模式、多继承等,同时也会借助各种语言中的例子来阐述我的思想。

  那些老生常谈的概念,相信每位读者都耳熟能详了,我当然不会无聊到浪费时间赘述一遍。我会试图从更高一层的角度对他们做一个总结,不过由于经验和水平有限,也难免有所疏漏,欢迎交流讨论。

  最后啰嗦一句:

  没有银弹

  Swift 的 POP

  更多阅读请点击:郑州牛皮癣医院

  更多阅读请点击:郑州治疗牛皮癣医院

  Swift 非常强调 POP 的概念,如果你是一名使用 Objective-C (或者 Java 等某些语言)的老程序员,你可能会觉得这是一种“新”的编程概念。甚至有些文章喊出了:“放弃面向对象,改为面向协议”的口号。这种说法从根本上讲就是完全错误的。

  面向接口

  首先,面向协议的思想已经提出很多年了,很多经典书籍中都提出过:“面向接口编程,而不是面向实现编程”的概念。

  这句话很好理解,假设我们有一个类——灯泡,还有一个方法,参数类型是灯泡,方法中可以调用灯泡的“打开”和“关闭”方法。用面向接口的思想来写,就会把参数类型定义为某个接口,比如叫 Openable,并且在这个接口中定义了打开和关闭方法。

  这样做的好处在于,假设你将来又多了一个类,比如说是电视机,只要它实现了 Openable接口,就可以作为上述方法的参数使用。这就满足了:“对拓展开放,对修改关闭”的思想。

  很自然的想法是,为什么我不能定义一个灯泡和电视机的父类,而是偏偏选择接口?答案很简单,因为灯泡和电视机很可能已经有父类了,即使没有,也不能如此草率的为它们定义父类。

  接口的缺点

  所以在这个阶段,你暂且可以把接口理解为一种分类,它可以把多个毫无关系的类划分到同一个种类中。但是接口也有一个重大缺陷,因为它只是一种约束,而非一种实现。也就是说,实现了某个接口的类,需要自己实现接口中的方法。

  有时候你会发现,其实像继承那样,拥有默认实现也是一件挺好的事。还是以灯泡举例,假设所有电器每一次开、关都要发出声音,那么我们希望 Openable 接口能提供一个默认的 open 和 close 的方法实现,其中可以调用发出声音的函数。再比如我的电器需要统计开关次数,那我就希望 Openable 协议定义了一个 count 变量,并且在每次开关时对它做统计。

  显然使用接口并不能完成上述需求,因为接口对代码复用的支持非常差,因此除了某些非常大型的项目(比如 JDBC),在客户端开发中(比如 Objective-C)使用面向接口的场景并不非常多见。

转载于:https://my.oschina.net/u/3036964/blog/794145

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值