Q1:使用“界面继承”和“带界面的组合”设计OOP代码时,哲学有什么不同? (请专注于处理界面部分,因为我知道继承和组合以及为什么组合比继承更受青睐)。
Q2:接口继承应该优于组合或组合+接口的任何用例场景?
P.S。重点应该是继承和组合中的界面角色。任何有关相关设计的添加提示都将受到高度赞赏。
答案 0 :(得分:1)
你可以说接口继承是声明性的,因为它只说明接口应该是什么样的:
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();
}
方法撰写 DoFoo
和IBaz
。这些接口中的一个或两个可以定义为独立接口或者被接受的接口 - IGrault
方法并不关心。
正如上面的答案所解释的那样,界面继承和组合是两个独立的关注点,因此将一个人优先于另一个人没有任何意义。他们可以共存,但他们不必这样做。