2

在图表生成项目中,我有 2 个类。一种称为 BitmapChart,另一种称为 VectorChart。它们的所有属性都是相同的,并且它们具有相同的方法(尽管具有不同的实现)。有一个例外,那就是 Generate() 函数。对于 BitmapChart 对象,它返回一个 Stream,而对于 VectorChart 对象,它返回一个 XmlDocument。

起初我认为我应该使用继承,两者都是“图表”,它们共享相同的属性和方法。但后来我意识到由于返回类型不同,多态是不可能的。

是否有我缺少的 OO 原则或设计模式来使我的代码更优雅?

4

1 回答 1

1

相同的方法(尽管有不同的实现)。

如果您希望能够将它们互换使用,请为这些方法创建一个接口。但是由于这些Generate()方法做不同的事情,所以不要将它们包含在接口中。您甚至可能应该将它们命名为不同的名称,即GenerateStream()GenerateXml()

至于实现的交集(相同的属性,可能是部分方法),您应该尝试将逻辑和表示分离。所以这对你来说可能是一个更好的方法:

+--------+        +----------------------+
| Chart  |        |     <<interface>>    |
|--------|        |     ChartRenderer    |
|-data   |        |----------------------|
|-labels |        |+setChart(Chart chart)|
|- ...   |        |+...                  |
+--------+        +----------------------+
                        ^         ^
                        |         |
       +----------------+--+   +--+----------------+
       |BitmapChartRenderer|   |VectorChartRenderer|
       |-------------------|   |-------------------|
       |+generateStream()  |   |+generateXml()     |
       +-------------------+   +-------------------+
于 2013-02-15T09:10:02.790 回答