常規接口:Decorator模式和泛型
public interface IComputation
{
void Reset();
float GetValue1();
float GetValue2();
}
通用接口:
public interface IComputation<T> : IComputation where T : IComputation
{
T Proxy { get; set; }
}
現在的類:
public abstract class Computation<T> : IComputation<T> where T : IComputation
{
public T Proxy { get; set; }
}
班 'ComputationCache' 是「裝飾」的計算:
internal abstract class ComputationCache<T> : IComputation where T : IComputation
{
public T Proxy { get; set; }
public float GetValue1()
{
bool isCached = //check cache.
if(!isCached)
{
//compute value
float value1 = Proxy.GetValue1();
//update cache
return value;
}
}
}
要初始化裝飾計算,我試過如下:
public ComputationCache(IComputation<T> proxy)
{
Proxy = (T) proxy;
proxy.Proxy = this;
}
...它提供了以下錯誤「:
Cannot convert source type 'ComputationCache' to target type 'T'.
可以在它是否是更好有人評論使用方法:
ComputationCache<T> : IComputation where T : IComputation
VS
ComputationCache<T> : IComputation<T> where T : IComputation
你的抽象看起來有點過分 – Rahul
我必須說,你失去了我 –
@Rahul。上面顯示的類是抽象的,並且被多個Computation的子類進行分類,以及從基類緩存類派生的相應的「ComputationCache」。我試圖避免在下層重複投射'Proxy'屬性 – alhazen