接口继承和组件与接口之间的区别

时间:2015-10-08 08:30:03

标签: oop inheritance interface composition

Q1:使用“界面继承”和“带界面的组合”设计OOP代码时,哲学有什么不同? (请专注于处理界面部分,因为我知道继承和组合以及为什么组合比继承更受青睐)。

Q2:接口继承应该优于组合或组合+接口的任何用例场景?

P.S。重点应该是继承和组合中的界面角色。任何有关相关设计的添加提示都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

A1

你可以说接口继承是声明性的,因为它只说明接口应该是什么样的:

var parent = $('your-selector');

parent.animate(
    {'margin-right' : '-=5px', 'margin-left' : '+=5px'},
    200,
    function() {
        parent.animate(
            {'margin-right' : '+=10px', 'margin-left' : '-=10px'},
            100,
            function() {
                parent.animate({'margin-right' : '-=5px', 'margin-left' : '+=5px'}, 200)
            })
    })

这些界面仍然没有行为,只有形状

另一方面,

带接口的组合是一种组合实现的方法。

public IDerivedInterface : ISomeOtherInterface { /*...*/ }

public Foo DoFoo(Bar bar) { var qux = this.baz.Corge(bar); // baz is IBaz, an interface var garply = this.grault.Waldo(qux); // grault is IGrault, another interface return garply.ToFoo(); } 方法撰写 DoFooIBaz。这些接口中的一个或两个可以定义为独立接口或者被接受的接口 - IGrault方法并不关心。

A2

正如上面的答案所解释的那样,界面继承组合是两个独立的关注点,因此将一个人优先于另一个人没有任何意义。他们可以共存,但他们不必这样做。