私の質問は、OOP のクラス設計に関するものです。Canceled、Modified、Added クラスの親クラスである ItemBase があるとします。Provider と Distributor の親である DueToBase クラスもあります。
ItemBase は DueToBase クラスにより変更される場合があります。
ItemBase には DueToBase 型のプロパティがあり、DueToBase には compute() というインターフェイス メソッドがあるとします。計算アルゴリズムは、特定の ItemBase 派生クラスに関連しています。したがって、ItemBase と DueToBase の関係には 6 つの異なる組み合わせがあります。
例。
ItemBase ib = new Added();
ib.changed = new Provider(ib);
ib.changed.compute();
私の質問は、ItemBase と DueToBase の関係を実際のオブジェクト指向プログラミングでどのように構築する必要があるかということです。インスタンス ItemBase のタイプを確認するための compute メソッドに、swich/case または if 条件句がありません。DueToBase の内部に別の XXXBase クラスがあり、そのクラスに別のインターフェイス メソッド YYY() があり、そのアルゴリズムが DueToBase の特定のインスタンス (さらには ItemBase) に依存している場合は、さらに悪化します。このような場合はどのように対処すればよいですか?そのようなことのための良いプログラミングパターンはありますか? たどった方向が悪いのかもしれません。どうぞよろしくお願いいたします。
私の図が明確ではなかったのかもしれません。問題は次の...疑似コードにあります:
doSomething(){
if(itemBase instanceof Cancelled){
if(dueToBase instanceof Provider)
algorithm1();
else if(dueToBase instanceof Company)
algorithm2();
}else if(itemBase instanceof Modified){
if(dueToBase instanceof Provider)
algorithm3();
else if(dueToBase instanceof Company)
algorithm4();
}else if(itemBase instanceof Added){
if(dueToBase instanceof Provider)
algorithm5();
else if(dueToBase instanceof Company)
algorithm6();
}
}
if 句が深くなると、さらに悪化します。