1

我有两个共享相同方法的类,我想根据需要在代码中切换它们。如果您查看下面的示例,您会发现代码的相同部分是重复的。CacheFile 和 CacheMemory 类是相同的,我确信这段代码可以收缩并且 CacheFile 和 CacheMemory 类可以切换。

    if (_cacheLocation == CacheLocation.File)
    {
        if (!CacheFile.Get(key, out value))
        {
            // Do lookup based on caller's logic.   
            context.Proceed();
            value = context.ReturnValue;
            CacheFile.Add(value, key, _cacheType, _expiry);
        }
    }

    if (_cacheLocation == CacheLocation.Memory)
    {
        if (!CacheMemory.Get(key, out value))
        {
            // Do lookup based on caller's logic.   
            context.Proceed();
            value = context.ReturnValue;
            CacheMemory.Add(value, key, _cacheType, _expiry);
        }
    }
4

4 回答 4

4

如果您使 CacheLocation 和 Cache Memory 实现一个公共接口,则可以使用该接口而不是单个类。

http://msdn.microsoft.com/en-us/library/ms173156.aspx

于 2012-04-16T15:33:37.977 回答
2

使用封装复制行为的类(定义公开此行为的接口)。在执行 CacheLocation.File 和 CacheLocation.Memory 的预期操作的两个类上实现此接口。

然后,您可以使用返回 ICache 的工厂,给定一个 CacheLocation 并且消费者可以使用它,而无需知道它在下面使用哪种实际存储。

于 2012-04-16T15:34:35.550 回答
0

您可以定义如下接口,从中继承 CacheFile 和 CacheMemory。

public interface ICache
{
   Get();
   Add();
}

它可以减少代码膨胀。

于 2012-04-16T15:37:01.223 回答
0

有几种方法可以处理这个问题。如果 CacheMemory 和 CacheFile 相互继承,或者是一个公共基类,您可以声明父类的变量并使用它。或者,如果您不想从另一个(或两者都从公共基础)派生一个,您可以让它们都实现公共接口并使用声明为接口实例的变量。

于 2012-04-16T15:35:21.193 回答