有人问了我一个问题,我想在这里得到我的回答。
问: 在哪种情况下扩展抽象类比实现接口更合适?
A: 如果我们使用模板方法设计模式。
我说的对吗?
如果我不能清楚地陈述这个问题,我很抱歉。
我知道抽象类和接口之间的基本区别。
1)使用抽象类,当需求是这样的时候,我们需要在每个子类中为一个特定的操作(实现方法)实现相同的功能,为一些其他的操作(只有方法签名)实现不同的功能
2)使用接口,如果你需要把签名相同(和实现不同) ,以便你可以遵守接口实现
3)可以扩展一个抽象类的 max,但是可以实现多个接口
重申这个问题: 除了上面提到的情况之外,是否还有其他场景需要使用抽象类(其中之一是模板方法设计模式在概念上仅基于此) ?
接口与抽象类
在这两者之间做出选择实际上取决于你想要做什么,但幸运的是,Erich Gamma 可以帮助我们一点。
与往常一样,这里有一个权衡,一个接口给你关于基类的自由,一个抽象类给你 以后可以自由地添加新方法。Erich Gamma
在代码中使用 不能去改变一个界面,而不必改变很多其他的东西,因此避免这种情况的唯一方法是创建一个全新的 Interface,这可能并不总是一件好事。
Abstract classes
应该主要用于紧密相关的对象。Interfaces
更善于为不相关的类提供通用功能。