您的应用程序中可以有很多Abstract类吗?


9

我们最初想通过在公共接口中使用不同方法的实现来实现策略模式。这些将在运行时根据用户输入获取。

事实证明,我们有实现3-5种通用方法的Abstract类,只剩下一种方法可以用于不同的实现,即Strategy。

更新:对于许多抽象类,我的意思是有6种不同的高级功能,即6个包,每个都有其接口+ AbstractImpl +(实际Impl系列)。

这是一个不好的设计吗?

在以后的可扩展性方面有任何负面意见-我正准备与老年人进行代码/设计审查。

Answers:


8

不,这绝不是一个糟糕的设计。这是模板方法模式

它旨在封装算法步骤的各种行为,在您的方案中可能就是这种情况。在许多情况下,策略和模板方法模式可以很好地结合在一起。您可能将抽象策略作为框架,并将模板方法模式用于具体策略。很干净

它是可扩展的,而且您不需要重复代码。当您需要完全不同的内容时,只需使用策略界面来创建新的抽象或具体策略。


4

不,这可以完全确定(取决于细节-仅凭对您的具体案例的一点了解很难说更多)。在抽象基类中统一通用方法实现是完全可以的。

根据在类中使用单个抽象方法的方式,此模式可能是Template方法而不是Strategy。即,如果它是由基类中的其他最终方法调用的,而不是直接由外部世界调用的。


1

模板方法模式使子类通过抽象方法实现特殊代码,并且子类从超类继承通用方法。所以我不认为它有很多Abstract类,它只是一个Abstract类,所有子类都是实例类。


0

如果抽象类使用相同的内容实现相同的方法,那么为什么要使用多个抽象类呢?

如果他们对方法的实现方式有所不同,那么我认为没有问题。

为了改善可扩展性使用接口,那么如果您随后废弃抽象类,那么问题就不大了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.