问答详情
源自:2-2 学习观察者模式通用代码

为什么obsrever定义成了接口,但是subject定义成了父类?

为什么obsrever定义成了接口,但是subject定义成了父类?

提问者:慕移动6842083 2018-06-17 17:34

个回答

  • 慕粉1149573729
    2018-06-19 16:50:37

    接口和抽象类都是所谓的代码复用时使用。

    在使用时,要优先注意继承和接口概念,所有子类是一类事物(有兄弟关系)时,才应该是继承关系,不是一类事物就不要继承改用接口比较好;

    当不符合继承条件时,使用接口,接口可以理解为标准,只定义大致方向,不论具体实现的时候使用;

    当符合继承条件时,且你至少有一个方法是具体实现的时候,即已知时,可以考虑使用抽象类;

    我个人理解是,接口更像是人为定义一系列的行为,是一种赋予的感觉;父类(抽象类)是人为抽取共性,是一种提炼的感觉。

    至于优先级,都是看具体情况的,不过接口总体来说是比继承要灵活,毕竟是多实现、单继承。

    当然还有接口和继承都用的情况,这能实现更多变的情况。

    多写项目,遇到代码重复的时候,就多想想,慢慢就懂得接口和继承的好处和运用了。


  • 慕粉1149573729
    2018-06-19 16:04:24

    subject里面的方法是目标对象通用的,同时也是清楚的,所以定义成父类,则其具体目标对象就拥有了所有通用方法;

    obsrever则是提供一个标准行为updata,是未实现方法,其具体实现方法需要根据具体的观察者行为才能定义,所以应该为接口;