我有一个像这样的抽象类
public abstract Stuff
{
public abstract void doStuff();
}
几个类正在扩展 Stuff,覆盖 doStuff()。doStuff() 通常为每个实现执行完全不同的任务,但共享一个共同的部分。
实现这一点的最佳方法是什么?
我不想写这样的东西:
public void doStuff()
{
doTheCommonPart();
...
}
在每个扩展类中。
我有一个像这样的抽象类
public abstract Stuff
{
public abstract void doStuff();
}
几个类正在扩展 Stuff,覆盖 doStuff()。doStuff() 通常为每个实现执行完全不同的任务,但共享一个共同的部分。
实现这一点的最佳方法是什么?
我不想写这样的东西:
public void doStuff()
{
doTheCommonPart();
...
}
在每个扩展类中。
您可以使用模板方法模式:
public abstract Stuff
{
public abstract void doStuff();
public void doTheCommonPart() {
// ...
}
// Template method
public final void doIt() {
doTheCommonPart();
doStuff();
}
}
然后,您的客户端类只需调用模板方法doIt()
。它将执行公共代码部分,以及抽象方法的具体实现doStuff()
。
任何一个:
将公共代码放在类中的protected
方法中,Stuff
并从 ; 的每个实现中调用它doStuff
。或者
将通用代码添加到您的抽象Stuff
类并调用另一个抽象方法。
例如(1)
public abstract Stuff
{
public abstract void doStuff();
protected void commonCode()
{
//...
}
}
或 (2)
public abstract Stuff
{
public void doStuff()
{
// Do the common stuff initially...
// ...
// Then call the subclass implementation
doRealStuff();
}
public abstract void doRealStuff();
}
你可以这样定义,类似于模板方法设计模式:
public abstract Stuff
{
public abstract void doSpecificStuff();
public void doStuff()
{
doCommonStuff();
doSpecificStuff();
}
}