1.面向对象有很多的耦合性,而面向protocol,就可以像零件一样一个一个安装到类上。比如
protocol Flyable {
func fly()
}
extension Flyable{
func fly(){
print("我要上天啦")
}
}
protocol Eatable {
func eat()
}
extension Eatable{
func eat(){
print("遇佛吃佛,遇神吃神")
}
}
protocol Runable {
func run()
}
extension Runable{
func run(){
print("宝宝很能跑")
}
}
protocol Jumpable {
func jump()
}
extension Jumpable{
func jump(){
print("信不信我能跳上天")
}
}
class Bird : Flyable,Jumpable{
}
class Pig: Eatable {
}
class Tiger: Eatable,Runable,Jumpable {
}
- 可见通过protocol可以如此的方便进行功能模块的重用,如果上面的代码用类继承来实现,则很容易陷入全功能型接口的陷阱,你要建一个能吃能跑能跳的类来作为Tiger的父类吗?
- 除此之外,上篇博客还说了可以对接口进行选择性实现,则这样就更加方便灵活
- 而且,协议还能应用于struct,你用struct继承一个class试试?
struct Peopel : Eatable,Runable,Jumpable,Flyable {
}