2014-02-27 165 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(); 
     } 
    } 
} 
相关问题