2

チャート生成プロジェクトには、2つのクラスがあります。1つはBitmapChartと呼ばれ、もう1つはVectorChartと呼ばれます。それらのプロパティはすべて同じであり、同じメソッドを持っています(ただし、実装は異なります)。例外が1つあり、それはGenerate()関数です。BitmapChartオブジェクトの場合はStreamを返し、VectorChartオブジェクトの場合はXmlDocumentを返します。

最初は、継承を使用する必要があると思いました。どちらも「チャート」であり、同じプロパティとメソッドを共有しています。しかし、リターンタイプが異なるため、ポリモーフィズムは不可能であることに気づきました。

コードをよりエレガントにするために欠けているオブジェクト指向の原則やデザインパターンはありますか?

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 に答える