面向协议编程
2020-08-31 本文已影响0人
张_何
面向协议编程
- 面向协议编程(Protocol Oriented Programming, 简称 POP),是 swift 的一种编程范式,apple 于 2015 年 WWDC提出,swift 标准库中能见到大量 POP 的影子
- swift 也是一门面向对象的编程语言(Object Oriented Programming,简称 OOP),在 swift 开发中,oop 和 pop 是相辅相成的,任何一方并不能取代另一方
- POP 能弥补 OPP 的一些设计上的不足
OOP 的不足
- OOP 有些先天性的不足,比如如何将 BVC、DVC 中的公共方法 run 抽取出来
class BVC: UIViewController{
func run() {
print("run");
}
}
class DVC: UITableViewController {
func run() {
print("run");
}
}
- 基于 oop 想到的一些方案
1.将 run 方法放到另一个类 A中,然后 BVC、DVC拥有 A属性。
这种方式多了一些额外的依赖关系
2.将 run方法增加到 UIViewController 分类中。
这种方式会使 UIViewController 越来越臃肿,而且会影响它的其他所有子类。
3.将 run 方法抽取到新的父类,采用多继承方式(C++支持多继承)
这种方式会增加程序设计复杂度,产生另行继承问题,需要开发者额外解决。
POP 的解决方案
protocol Runnable{
func run()
}
extension Runnable {
func run() {
print("run");
}
}
class BVC: UIViewController, Runnable{
}
class DVC: UITableViewController,Runnable{
}
POP 注意点
- 优先考虑创建协议而不是父类(基类)
- 优先考虑值类型(struct、euum),而不是引用类型(class)
- 巧用协议的扩展功能
- 不要为了面向协议而使用协议