2014-02-27 176 views
0

當您使用相同方法和實現有多個類時可以使用哪種設計模式?具有相同實現的多種方法的模式

我曾考慮過使用爲方法提供訪問的Facade模式。但是當我看着類圖時,它並不是我想要的。

另一個想法是使用實​​現這些方法的(抽象)類,而類將擴展這個(抽象)類。

下一個方法在六個不同的類中定義。有這樣的多種方法,很難維護。

private void FactoryFaulted(object sender, EventArgs e) 
    { 
     ChannelFactory factory = (ChannelFactory)sender; 

     try 
     { 
      factory.Close(); 
     } 
     catch 
     { 
      factory.Abort(); 
     } 
    } 
+1

可以讓你的例子更廣泛?爲什麼你會一遍又一遍地需要相同的實現?泛型如何?如何將常見的東西移動到一個單獨的對象上,這個對象可以處理多個不同的「數據」對象?由於測試問題,我不會使用基類。 – BatteryBackupUnit

+0

只要這些類共享一個基類是合乎邏輯的,讓基類中的方法看起來是明顯的解決方案...... – Chris

+0

那麼,基本上是分散在不同類的方法的副本?它不是一個GoF模式,但是您是否考慮過將該方法分解爲您現有類使用的單獨的類?這將構成,而不是一個共同的基類... –

回答

3

您可以使用抽象類和擴展這個,或者創建一個Helper類,並呼籲在所有類是這樣的:

public static Helper 
{ 
    public static void FactoryFaulted(object sender, EventArgs e) 
    { 
     ChannelFactory factory = (ChannelFactory)sender; 

     try 
     { 
      factory.Close(); 
     } 
     catch 
     { 
      factory.Abort(); 
     } 
    } 
} 

public class YourClass 
{ 
    public void DoSomething() 
    { 
     var channelFactory = new ChannelFactory(); 
     Helper.FactoryFaulted(channelFactory, null); 
    } 
} 
+0

謝謝,我將使用一個Helper類。 – ronaldm

1

一般來說,你處理相同代碼的方式是不同的從你處理類似代碼的方式。設計模式(如Template Method Pattern)有助於減少許多類中類似的代碼量,但不相同。

當代碼是相同的,你可以把它放在一個靜態函數,和重用原樣:

internal static class FactoryHelper { 
    // Note that your method is not using instance variables of the class, 
    // making it an ideal candidate for making a static helper method. 
    public static void FactoryFaulted(object sender, EventArgs e) { 
     ChannelFactory factory = (ChannelFactory)sender; 
     try { 
      factory.Close(); 
     } catch { 
      factory.Abort(); 
     } 
    } 
} 
相關問題