對於下面的模型,你願意繼承或組成:畫布形狀模型的繼承vs組合?
- 我要畫上一個
canvas
每個代表一個數據對象 - 認爲它像一個狀態機圖對象:
Ellipses
代表States
,Lines
代表它們之間的connections/transitions
。對象表示本身永遠不會改變,即State
將始終顯示ellipse
。但是,一個ellipse
被吸入的方式應有所不同,例如,用於選擇應該具有不同的顏色,同時拖動它應該可能具有alpha通道等
從設計角度來看,一個ellipse
不是state
和line
不是transition
。無論如何,將兩個對象組合起來以便能夠在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
雖然從設計的角度來看一個rectangle
不是State
和state
不是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
將是我的對象的包裝。
矩形和線條應該延伸狀態和過渡還是包含它?
或者,也許還有第三個設計選項,我沒有看到。期待您的想法。
我使用Eclipse建模框架(EMF)做了類似的工作,也就是使用模型驅動技術。您將爲數據創建一個領域模型,一個用於圖形表示,另一個用於連接兩個元素。這需要一定的紀律,但最終還是可以得到回報的。 – 2013-03-25 21:37:08