美文网首页设计模式iOS学习笔记
还在用继承吗?你out了

还在用继承吗?你out了

作者: Hollylord | 来源:发表于2015-12-16 15:58 被阅读227次

    对于面向对象语言,继承是其最大的特点,但是继承不是万能的,切继承有很多弊端。今天题主写这篇文章的目的,就是为了能让大家看到继承的不好,并用一种新的替代方式-- 协议

    继承有哪些猫病?

    • 继承使得父类和子类耦合性太强
      什么意思?就是说子类继承父类以后,子类对父类的依赖性太强,使得代码的可移植性,复用性太差。
    • 由于iOS只能单一继承,不能多继承,所以在某些情况,使用继承不合理。
      比如IronMan,他能飞,那么他应该继承Fly这个类;其次他是人类,所以他应该继承Human这个类。但是我们不能多继承,咋办捏?
    • 即便是单一继承,有时也不合理。
      举个栗子:哈士奇,继承自Dog,Dog能跑,哈士奇继承了,但是,如果有一只哈士奇腿断了呢?这只哈士奇不能跑了怎么办?它确确实实是狗,但是如果用继承他就一定能跑。但是现在它腿断了不能跑了。这不又矛盾了吗?

    放弃继承用协议吧!

    那到底怎么解决呢? 首先,题主想声明一下:继承多用来定义一个类是什么;协议多用来定义一个类能做什么。这句话很关键,希望大家仔细揣摩。其次,题主的传递的核心思想就是让大家尽量少用继承,多用协议
    协议是干嘛的?就是用来解耦的,用来声明方法的。那好了,我们换协议来处理这些问题。

    例如IronMan,它是个人,那么他就继承自Human;然后我们写一个Fly的协议,只要他能飞,他就遵守这个协议。
    再比如:哈士奇继承自Dog,跑这个能力就用协议来定义,如果这只哈士奇能跑,就让它遵守Run这个协议,否则它就不用遵守,他就不能跑。

    这样做的好处是什么?就是大大降低了代码的耦合性,提高了代码的重用性。记住:继承父类的属性(一个类是什么),扩展子类的能力(一个类做什么)。

    相关文章

      网友评论

      • bigParis:协议更像是一种聚合, 当你遵守协议的时候就相当于你拥有了这个类, 但是不同是, 聚合后你可以使用这个类的方法, 但是遵守了协议只代表, 你可以"跑", 至于怎么跑, anyway, 你自己想.
      • 汪斗斗:说的好
        Hollylord:@Maximuum thx!多谢支持

      本文标题:还在用继承吗?你out了

      本文链接:https://www.haomeiwen.com/subject/jktphttx.html