我有一个关于 OOP 设计的问题。
我有一个抽象类
Converter
,它将 Document
列表作为输入,以特定方式处理它们,并返回一个新的 Document
。 Converter
类有多个实现。
输入并生成为输出的文档也可以有所不同——它可以是 PDF、纯文本(字符串)或图像。
Converter
类的每个实现只能处理特定类型的文档(例如,仅照片和 PDF,或仅文本和 PDF)。文档类型的数量预计会不断变化。
在系统的第一个版本中,我将文档设为通用类型,但我意识到每种文档类型都需要特定的格式。
现在我正在考虑一种新的设计。我应该在基础文档类中使用泛型还是使用
Object
?
UML
abstract class Document<T>
=====================
content: T
class TextDocument implements Document<String>
class ImageDocument implements Document<Image>
...
abstract class Converter
====================
canWorkWith: List<Document<?>>
doWork(List<Document<?>>): Document
或
abstract class Document
=====================
content: Object
class TextDocument implements Document
=====================
content: String
哪种方法更适合这种情况?为什么?
这个问题没有通用的最佳答案,因为它可能取决于领域,也取决于实现语言。
一般来说,优先顺序是:
Document
接口。Document
实现的公共核心,并实现最大的可扩展性。