我有一个关于将通用代码保存在基类中并让派生类调用它的问题,即使派生类的触发方法是从基派生的.因此,base-> derived-> base类型调用堆栈.
下列外观好吗,还是闻起来?我已经编号了流程步骤…
public abstract class LayerSuperType
{
public void DoSomething() // 1) Initial call from client
{
ImplementThis(); // 2) Polymorphic dispatch
}
protected abstract void ImplementThis();
protected void SomeCommonMethodToSaveOnDuplication(string key) // 4)
{
Configuration config = GetConfiguration(key);
}
}
public class DerivedOne : LayerSuperType
{
protected virtual void ImplementThis() // 2)
{
SomeCommonMethodToSaveOnDuplication("whatever"); // 3) Call method in base
}
}
public class DerivedTwo : LayerSuperType
{
protected virtual void ImplementThis() // 2)
{
SomeCommonMethodToSaveOnDuplication("something else"); // 3) Call method in base
}
}
解决方法:
看起来非常简化Template Method Pattern,其中子类在算法实现的正确时机执行某些特定类型的操作,但总体流程由基类上的方法控制.您还以基类方法的形式为子类提供了一些服务;只要您保持良好,就可以了,只要SOLID就可以了.