面向协议与面向对象的区别

面向对象的设计和面向协议的设计都使用了多态让我们使用同样的接口来跟不同的类型进行交互。在面向对象的设计中,我们使用了基类提供的接口来跟所有的子类进行交互。在面向协议的设计中,我们使用了协议和协议扩展提供的接口来跟遵守该协议的类型进行交互。两种设计方式写出的代码都很好而且易懂。但个人感觉协议/协议扩展代码更好,因为协议/协议扩展的方法整体更干净和易懂些。 当我们谈到面向协议编程的时候应该从协议开始
摘要由CSDN通过智能技术生成

面向对象的设计和面向协议的设计都使用了多态让我们使用同样的接口来跟不同的类型进行交互。在面向对象的设计中,我们使用了基类提供的接口来跟所有的子类进行交互。在面向协议的设计中,我们使用了协议和协议扩展提供的接口来跟遵守该协议的类型进行交互。

两种设计方式写出的代码都很好而且易懂。但个人感觉协议/协议扩展代码更好,因为协议/协议扩展的方法整体更干净和易懂些。

当我们谈到面向协议编程的时候应该从协议开始构思而不是从基类开始。然后我们可以使用协议扩展来为遵守该协议的类型添加功能,而对于面向对象编程,我们还得从基类开始。

在面向协议设计中我们更多的使用了值类型(结构体struct)而非引用类型(类class)。Apple已经说了我们应该在合适的地方尽可能地偏好使用值类型而非引用类型。
【struct与class的区别会在下一篇博客中讲到】

协议/协议扩展相比基类有 3 个优点:

第一个优点是类型可以遵守多个协议而只能拥有一个基类。这意味着我们可以创建很多个协议以添加每个特定的功能而不是把所有功能都写到一个巨大的类中。例如,使用一个的 People 协议,我们还能创建包含特定需求和功能的 Teacher、Fireman、和 Doctor 协议。然后,English Teacher 和 Surgery Doctor 类型会遵守 People、Teacher 和 Doctor 协议。使用基类, 我们需要把定义在 People、Teacher 和 Doctor 协议中的功能组合到单个巨大的超类中。这种类如果足够庞大也常被称为上帝类,容易造成遍地bugs的后果,耦合度太高。

第二个优点是我们不需要源代码就可以使用协议扩展来添加功能。这意味着我们可以扩展任何协议,即使是 Swift 自己内建的协议也能扩展。而给超类添加功能我们需要知道源代码。我们可以使用扩展给超类添加功能

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值