c# - 用于处理不同实现的 if else 的设计模式

标签 c# .net

我有以下两种类型的处理器

public interface IDefaultProcessor1
{
    void Process(IProcess p);
}

public interface IDefaultProcessor2
{
    T Process<T>(IProcess p);
}

public class DefaultProcessor : IDefaultProcessor1
{
    public void Process(IProcess p)
    {
        try
        {
            foreach ...
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            throw;
        }
    }
}

public class AnotherProcessor : IDefaultProcessor2
{
    public T Process<T>(IProcess p)
    {
        try
        {
            foreach ...
            return p.Result()...
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            throw;
        }
    }
}

大多数实现代码完全相同(错误检查等),除了一个返回值。有没有一种模式可以清理这个问题?

最佳答案

是的,有。

在同一接口(interface)上定义这两种方法:

public interface IDefaultProcessor
{
    void Process(IProcess p);
    TResult Process<TResult>(IProcess p);
}

然后:

public class DefaultProcessor : IDefaultProcessor
{
     public void Process(IProcess p)
     {
         DoProcess(p);
     }

     public TResult Process<TResult>(IProcess p)
     {
         object result = DoProcess(p);
         return (TResult)result;
     }

     private object DoProcess(IProcess p)
     {
         try
         {
             foreach ...
             return p.Result();
         }
         catch(Exception ex)
         {
              Console.WriteLine(ex.Message);
              throw;
         }
     }
}

关于c# - 用于处理不同实现的 if else 的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40111797/

相关文章:

c# - 将 Java Map<string, string> 从 XML 解析为 C# 对象

.net - 使用 Mono.Cecil 确定类型是否实现接口(interface)

c# - 如何创建通用例程来计时方法?

c# - 强制将静态类常量作为数据类型

c# - 从内存位置复制字节时是否需要固定结构

c# - .Net 5 - WPF,单元测试问题

c# - 基于接口(interface)的编程,我做对了吗?

.net - 我可以在 ASP.NET MVC 中的哪里放置自定义类?

c# - 开始,停止,暂停和继续运行很长时间的方法

c# - 替代 Thread.Suspend() 方法