2012-12-09 84 views
3

我正在爲autocad編寫一個加載項,但是我遇到了設計問題。我認爲這可以通過設計模式來解決。哪個設計模式用於繪製應用程序

我試圖繪製表,該表具有2份框架和頂/表面。所以我有這些3類:

  • 繪製:此類驗證用戶的輸入和請求的插入點,創建所述框架和表面,並插入新創建的實例爲AutoCAD的DB。
  • :計算基於長度和深度的幀。
  • 表面:計算基於長度和深度的表面。

我的問題是,如果由用戶給出的長度值大於最大值,比我必須產生2個或更多的表面。表面類也必須知道哪個表面是第一個和最後一個表面。並且Draw類也應該知道第一個結束放置第二個表面的位置。

我現在所做的是將一個名爲calcNumberOfSurface(int len)的方法放入Draw類中,並且在此方法中迭代遍歷表面的數量以創建每個Surface類的新instate。這個解決方案也有兩個問題,Surface類不知道它是第一個還是最後一個。並且不能定義第一個Surface的結束位置。我必須將這個實現到Draw類中。

是否有任何的最佳做法或使用該解決這個問題的一種設計模式?

+1

以我的經驗,如果你去到一個項目計劃使用一種設計模式,你會在它複雜化,並最終花費方式有更多的時間就可以了。一旦我看到可以有效使用的地方,通常我會重構爲設計模式。很多時候設計模式會投入很多你不一定需要的東西,這就是爲什麼我採取這種方法。所以我等到一個燈泡點擊「嘿這種模式非常適合」開始使用它們,否則事情最終會變得比他們需要的更復雜。無論如何,這只是我的偏好,我相信其他人可能會不同意。 – Preston

+0

「我的問題是,如果用戶給出的長度值大於最大值」 - 什麼是最大值?我不明白爲什麼你必須創建多個曲面。 – rro

+0

@preston也許你是對的,但我沒有足夠的DP經驗來確定我是否需要一個以及哪一個。我的想法是在這裏問一下,然後有人可以認出DP。 – user1890239

回答

3

我同意普雷斯頓。在你開始設計模式之前,我想你必須首先考慮所有需要的類以及每個類的成員。對於你的例子:

  • 是不是結束位置的Surface類的成員?
  • 另一個類可能表示List<Surface>(曲面列表)。這個類將包含第一個和最後一個曲面。
+0

@ user1890239這是個好建議。繪圖類不需要知道Surface的細節。實際上,Surface可以設計爲能夠繪製自己(從IDrawable類派生/從AbstractDrawObject繼承並實現Draw方法)。相同的框架。 – rro

相關問題