2009-11-13 29 views
2

使用適配器模式是最好的設計,當你想要適應的是一個持有領域,而不是方法或功能的類?這是適配器模式的最佳用法嗎?

例如,下面是最好的方法來解決這個問題嗎?如果您的答案有所不同,我使用C#。

NewClass 
    private Guid _guidId; 

    AdpaterClass : NewClass 
    private Guid _guidId; 

    LegacyClass : LegacyBaseClass 
    private Guid _guidId; 
    private String _stringDescription; 
    private DateTime _dateTimeValue; 

爲什麼我要這樣做?

我正在嘗試將LegacyClass和另一個類放到相同的基線,以便我可以使用一個常用方法對_guidId進行排序/過濾。常用的方法會引入一個Guid列表,檢查_GuidId並查看它是否匹配,然後根據它執行一些功能。我的目標不是多次寫入相同的排序/過濾函數,因爲它們幾乎完全相同。

感謝您的建議。

+3

你想要做什麼?你爲什麼適應一個類只是有另一個私人實例變量? – 2009-11-13 20:17:56

+2

我沒有看到任何屬性。只是田野。但是,如果你有一個純粹由屬性定義的接口,那麼對接口進行任何修改都需要一個適配器來暴露這些屬性...... – Shog9 2009-11-13 20:19:41

+0

爲什麼不,一個屬性只是get/set方法的語法糖。 – 2009-11-13 20:36:39

回答

9

我想你在找什麼是類似以下內容:

interface ICanHazGuidId { 
    Guid GuidId { get; } 
} 

class NewClass : ICanHazGuidId { 
    public Guid GuidId { get; private set; } 
    // etc. 
} 

class AdapterClass : ICanHazGuidId { 
    private LegacyClass legacy; 
    public Guid GuidId { 
     get { 
      // obtain and return legacy._guidId; 
     } 
    } 
    // constructor eating instance of LegacyClass etc. 
} 

然後,只需執行一個IComparer<ICanHazGuidId>等,如果是這樣,這將是一個良好的使用適配器模式。

+4

interface ICanHazGuidID {...} – Juliet 2009-11-13 20:44:42

+0

@Juliet:值得編輯。 – jason 2009-11-13 21:17:22

+0

+ 1爲聰明的界面命名,同時保持與MS推薦的命名約定(帶領「I」的界面。)好玩。 – jro 2009-11-13 21:28:47

相關問題