グラフィックにいくつかの関数を描画できるアプリケーションを設計しています。各関数は、このグラフィッククラスに渡す一連のポイントから描画されます。
ポイントにはさまざまな種類があり、すべてMyPointクラスから継承されます。ある種のポイントについては、そのまま画面に印刷するだけで、他のポイントは無視でき、他のポイントは追加されるため、複雑になる可能性のあるロジックが関連付けられています。
ここでは、実際にグラフィックを描画する方法は主要な問題ではありません。気になるのは、このGraphicMakerクラスがいわゆる神オブジェクトにならないようにコードロジックを作成する方法です。
次のようなものを作成するのは簡単です。
class GraphicMaker {
ArrayList<Point> points = new ArrayList<Point>();
public void AddPoint(Point point) {
points.add(point);
}
public void DoDrawing() {
foreach (Point point in points) {
if (point is PointA) {
//some logic here
else if (point is PointXYZ) {
//...etc
}
}
}
}
このようなことをどのように行いますか?正しい方法は、各Pointオブジェクトに描画ロジックを配置することだと思います(したがって、Pointの各子クラスはそれ自体を描画する方法を知っています)が、2つの問題が発生します。
- 自分自身を描画する方法を知るために、GraphicObjectクラスに存在する他のすべてのポイントを知る必要がある種類のポイントがあります。
- グラフィッククラスから多くのメソッド/プロパティを公開できるので、すべてのポイントがグラフィッククラスへの参照を持ち、必要に応じてすべてのロジックを作成できますが、それほど大きな代償はありません。神のクラスを持ちたいですか?