我有两个共享相同方法的类,我想根据需要在代码中切换它们。如果你看下面的例子,你会发现相同的代码部分是重复的。 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);
}
}
答案 0 :(得分:4)
如果使CacheLocation和Cache Memory实现公共接口,则可以使用接口而不是单个类。
答案 1 :(得分:2)
使用封装复制行为的类(定义公开此行为的接口)。在两个类上实现此接口,这两个类执行CacheLocation.File和CacheLocation.Memory的预期操作。
然后,您可以使用返回ICache的工厂,给定一个CacheLocation,消费者可以使用它而不知道它在下面使用的是哪种实际商店。
答案 2 :(得分:0)
有几种方法可以解决这个问题。如果CacheMemory和CacheFile相互继承,或者是公共基类,则可以声明父类的变量并使用它。或者,如果您不希望从另一个派生出一个(或者从公共基础派生两者),您可以让它们实现公共接口并使用声明为接口实例的变量。
答案 3 :(得分:0)
您可以如下定义接口,从中继承CacheFile和CacheMemory。
public interface ICache
{
Get();
Add();
}
它可以减少代码膨胀。