Ton*_*y D 12 c# java architecture design-patterns abstract-base-class
在阅读了最优秀的"Head First Design Patterns"一书之后,我开始向同事们传播模式和设计原则的好处.在颂扬我最喜欢的模式的优点 - 策略模式 - 我被问到一个让我停顿的问题.当然,策略使用继承和组合,当我的同事问"为什么使用抽象基类而不是具体的类?"时,我在其中一个关于"程序到接口(或超类型)而不是实现"的长篇大论. .
我只能提出"你强迫你的子类实现抽象方法并阻止它们实例化ABC".但说实话,这个问题让我想起了gaurd.
Ner*_*ury 22
如果需要实现特定方法,请使用接口.如果存在可以拉出的共享逻辑,请使用抽象基类.如果基本功能集完全独立,那么您可以使用concreate类作为基础.抽象基类和接口不能直接实例化,这是其中一个优点.如果您可以使用具体类型,那么您需要执行覆盖方法,并且它具有"代码味道".