具有相同实现的多个方法的模式

时间:2014-02-27 14:09:55

标签: c# design-patterns

当您有多个具有相同方法和实现的类时,可以使用哪种设计模式?

我考虑过使用提供方法访问的Facade模式。但是当我看到类图时,它并不是我想要的。

另一个想法是使用实​​现这些方法的(抽象)类,类将扩展这个(抽象)类。

下一个方法是在六个不同的类中定义的。有这样的多种方法,很难维护。

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

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

2 个答案:

答案 0 :(得分: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);
   }
}

答案 1 :(得分: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();
        }
    }
}