2、Swift 编程:面向对象与面向协议的对比分析

Swift 编程:面向对象与面向协议的对比分析

1. 面向协议编程概述

在编程中,面向对象编程通常从思考对象和类层次结构开始设计,而面向协议编程则有所不同,它从思考协议开始。不过,面向协议编程不仅仅关乎协议本身。

在当前示例中,若要以面向协议编程的方式重新设计解决方案,需要重新思考两个方面:
- Drink 类 :面向协议编程建议从协议而非超类开始。因此,将 Drink 类转变为 Drink 协议,并使用协议扩展为符合该协议的饮料类型添加通用代码。
- 引用(类)类型的使用 :Swift 中,苹果建议在适当的情况下优先使用值类型而非引用类型。在本示例中,饮料类型(如 Jolt 和 CaffeineFreeDietCoke)使用值(结构体)类型,而 Cooler 类型使用引用(类)类型。这是因为饮料类型的实例通常只有一个所有者,而 Cooler 类型的实例可能会有代码的多个部分与之交互。

以下是引用类型和值类型传递实例时的区别:
| 类型 | 传递实例方式 | 更改影响 |
| ---- | ---- | ---- |
| 引用类型 | 传递对原始实例的引用 | 更改会反映在所有引用中 |
| 值类型 | 传递原始实例的新副本 | 一个实例的更改不会反映在其他实例中 |

2. 面向协议编程示例实现

首先创建 Drink 协议:

protocol Drink {
    var volume: Double {get set}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值