OOP 设计:我应该在基类中使用泛型还是多态性?

问题描述 投票:0回答:1

我有一个关于 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

哪种方法更适合这种情况?为什么?

oop design-patterns uml
1个回答
0
投票

这个问题没有通用的最佳答案,因为它可能取决于领域,也取决于实现语言。

一般来说,优先顺序是:

  • 通过接口实现多态性,特别是当您使用具有接口/协议作为语言构造的语言时。 这种方法留下了巨大的自由,因为任何类都可以修改来实现
    Document
    接口。
  • 通过类实现多态性,因为这允许同时重用不同
    Document
    实现的公共核心,并实现最大的可扩展性。
  • 泛型(UML 中的模板),如果您需要更大的灵活性。 泛型可能有一些限制(例如,在 C++ 中,它是编译时间,因此不如多态设计允许的在运行时更改类型那么灵活)。 在 UML 中,有很多模板特征是故意没有指定的。 但是,如果泛型的(隐式或显式)接口使用文档特定类型,这将非常有用。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.