次のモデルでは、継承または構成のどちらを使用しますか。
canvas
それぞれがデータオブジェクトを表すオブジェクトを描画したい- ステートマシン図のように考えてください。
Ellipses
表現しStates
、それらの間をLines
表現connections/transitions
します。オブジェクト表現自体は決して変更されません。つまり、aState
は常に。で示されますellipse
。ただし、ellipse
描画方法は異なる必要があります。たとえば、選択の場合は色を変え、ドラッグする場合はアルファチャネルなどを使用する必要があります。
設計の観点から、anellipse
はではなく、state
aline
はではありません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
なく、State
astate
はではありませんが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番目のデザインオプションもあるかもしれません。あなたのアイデアを楽しみにしています。