基本上我有稱爲Geometry
基類,以及一些衍生物如Point
,Polygon
等...設計問題,基類知道它的衍生物
Geometry
實現像這樣的方法交叉點:
Geometry* intersection(Geometry* other)
{
Geometry* inter = compute_intersection(this, other);
if (inter is a polygon)
return new Polygon(inter);
if (inter is a point)
return new Point(inter);
}
當我計算我的程序中的兩個幾何體的交集時,我獲得了一個Geometry*
,我可以將其轉換爲任何真實值。
這是一個很好的設計嗎?我認爲可能是錯誤的是,我必須在每次計算交叉點和dynamic_cast結果(可能較慢)時檢查實際類型。但我認爲主要的問題是,在這個設計中,Geometry
必須知道它的派生(Point,Polyline?等等)。
什麼可能是一個很好的解決方案,以避免這些問題?
您需要抽象工廠設計模式。 – 2012-04-25 07:35:18
@Als它不是純粹的工廠,但他已經實現了它... – 2012-04-25 07:49:29
這真的是你的代碼的樣子嗎?我有一種感覺,你沒有講完整個故事...... – 2012-04-25 07:52:17