次のモデルでは、継承または構成のどちらを使用しますか。
canvasそれぞれがデータオブジェクトを表すオブジェクトを描画したい- ステートマシン図のように考えてください。
Ellipses表現しStates、それらの間をLines表現connections/transitionsします。オブジェクト表現自体は決して変更されません。つまり、aStateは常に。で示されますellipse。ただし、ellipse描画方法は異なる必要があります。たとえば、選択の場合は色を変え、ドラッグする場合はアルファチャネルなどを使用する必要があります。
設計の観点から、anellipseはではなく、statealineはではありませんtransition。とにかく、両方のオブジェクトを組み合わせて、それらをaに収集し、すべてのオブジェクトList<Shape>で実行できるようにするのが適切です。shape.draw()
現在、2つの設計モデルが可能ですが、2つのクラスは常に同じであると考えています。
interface Shape {
void draw();
}
abstract class Figure implements Shape {
//basic vars like start and end coordinates
int x0, y0, x1, y1;
}
継承:
abstract class State extends Figure {
String name;
}
class Rectangle extends State {
@Override void draw();
}
class Line extends Figure;
class Transition extends Line
設計の観点からは、aはではrectangleなく、Stateastateはではありませんがfigure、描画コンテキストに関しては、これは実行可能である可能性があります。shapes、描画などの処理に必要なもののほとんどを継承できたからです。
または構成:
abstract class State {
String name;
}
class Rectangle extends Figure {
private State state;
@Override void draw();
}
class Line extends Figure {
private Transition transition;
@Override void draw();
}
したがって、Rectangle+Lineは私のオブジェクトのラッパーになります。
長方形と線はむしろ状態と遷移を拡張するべきですか、それともそれを含むべきですか?
または、私が見なかった3番目のデザインオプションもあるかもしれません。あなたのアイデアを楽しみにしています。