![]() |
1
9
设计模式不是随机注入应用程序的东西。它们是设计时的各种东西,而不是在代码烤好后撒在代码上的帕尔马干酪。 也就是说,乔希·布洛克的开创性 通用程序设计 强烈鼓励开发人员使用接口来实现共享行为,而不是使用继承。这符合我自己的经验。 ETA:还有其他原因,如果您正在实现一个接口,那么您可以轻松地创建一个该接口的模拟模型,用于测试,而不必担心继承层次结构的其余部分。 |
![]() |
2
5
设计模式不会“注入”到代码中——您首先需要注意的是,您的问题与许多其他人解决的问题类似,并且他们已经提取了解决问题的模式。最著名的是 here 另外,您是否要使用继承(aka extending)或接口取决于。通常界面和合成效果更好。 |
![]() |
3
2
这两个特征并不相互排斥。接口和实现指定类型和与类型的兼容性。继承允许有效地共享代码。在经典设计中,类型层次结构是使用接口表示的,而代码重用是使用继承实现的。 |
![]() |
4
1
我同意人们不应该考虑注入或使用某些设计模式。设计模式旨在在给定的上下文中解决非常具体的问题。 关于接口和继承: 界面 在需要运行时多态性时使用。因此,您定义了一个接口,并且可以有多个不同的接口实现。在客户机代码中,您可以将引用声明为接口类型。现在,您不必担心在运行时传递给客户机的对象的实际类型。您只关心对引用调用一个方法。
在上面的示例中,作为客户机,您只需将引用声明为汽车类型。在运行时,你可以有马鲁蒂或保时捷对象,你不关心。您关心的只是调用startengine或stopengine。 遗传 通常用于代码的可重用性和可扩展性。所以,在两个类中有公共代码,并且这两个类似乎都属于一个公共类型,然后您可以创建一个父类(有时是抽象的)并移动父类中的公共代码。这样就可以消除重复的代码。另一个用例是可扩展性,有时您无法控制类的源代码,但仍然希望添加/更改一些行为。可以使用继承并重写某些方法。 还有一件事叫 “作文” 对于可扩展性来说,这是比继承更好的方法。 |