2015-02-24 27 views
1

我的設計出現了一些小問題。將複合圖案轉換爲具有其他行爲的新圖案

我們必須在我們使用的是複合圖案來表示分層數據結構的內部框架: Framework domaim model object

這種分層數據結構由「閱讀文件」的方法返回從框架到我們的應用程序和也被其他應用程序使用。

現在,在我們的應用程序,我們需要完全一樣的數據結構(複合模式),但更多的行爲:我們需要爲每個實體額外GetCompareText()方法。而且此方法應在每個實體定義:

Application Domain Mode object

  • ContainerEntity應該實現對GetCompareText方法的默認行爲爲「容器」
  • LeafEntity應該實現的默認行爲對於GetCompareText方法「葉」
  • 一些葉實體可以ovveride的行爲(例如,LeafEntityA必須重寫的行爲,但LeafEntityB必須有默認行爲)
  • 一些Container實體可以覆蓋默認行爲(ContainerEntityA使用默認行爲,當ContainerEntityB覆蓋它時)。

我們怎樣才能做到這一點? 我們的應用程序中是否需要另一個複合模式? Decorator模式是一個選項嗎?

我希望我很清楚

感謝您的協助!

伯努瓦

+0

您是否需要在框架和應用程序之間分開GetCompareText行爲?您可以將GetCompareText包含在IEntity實現對象中(從框架返回),然後通過應用程序中的接口使用它們。 – 2015-02-24 09:06:02

+0

這是一個選項,但我寧願分開這個。 GetCompareText與我們的新應用程序真正相關。我認爲,使用框架的其他應用程序不應該知道這種行爲。 – 2015-02-24 09:07:25

+0

裝飾者似乎是這種情況下的明顯選擇?您還可以查看訪問者模式,並只允許特定的應用程序訪問GetCompareText行爲的實體,但這會爲您的設計增加更多層次複雜性? – 2015-02-24 09:15:07

回答

0

我已經實現Decorator模式爲我的域模型對象是這樣的:

Decorator Pattern

這是實現正確的嗎?

什麼是檢索任何實體(如果存在的話返回裝飾的一個實例,否則,返回默認裝飾)適當的「裝飾」的最佳解決方案?