我有一个带有抽象Work()方法的作业基类。这在我继承的类中被覆盖/实现。
我想要实现的是将中止条件应用于所有派生类。模板方法模式似乎对我没有帮助,因为我需要在我的抽象Work() - 类中进行此检查。
解决方法是将Work()设为虚拟,但后来我不再强制执行它(我想做的事):
public abstract class First
{
protected virtual void Work()
{
//do stuff
}
}
public class Second : First
{
protected override void Work()
{
base.Work();
}
}
有没有办法实现我的目标?
答案 0 :(得分:2)
模板方法模式似乎对我没有帮助,因为我需要在抽象
中进行此项检查Work()
您选择了正确的模式,但未正确应用它。
模板方法模式背后的想法是使Work
非虚拟,并为子类提供单独的方法,虚拟或抽象,以覆盖。这样,可以在基类的Work
函数中执行可以中止作业的所有检查,而派生类将提供检查成功时要执行的操作的实际实现:
public abstract class First {
public void Work() {
if (!CheckPreconditions()) {
// Abort the job
return;
}
DoWork();
}
protected abstract void DoWork();
}
public class Second : First {
protected override void DoWork() {
// Do the actual work here
}
}