Sim*_*mbi 3 java design-patterns abstract
我有一个像这样的抽象类
public abstract Stuff
{
public abstract void doStuff();
}
Run Code Online (Sandbox Code Playgroud)
几个类正在扩展Stuff,重写doStuff().doStuff()通常为每个实现执行完全不同的任务,但共享一个共同的部分.
什么是实现这个的最佳方式?
我不想写一些像:
public void doStuff()
{
doTheCommonPart();
...
}
Run Code Online (Sandbox Code Playgroud)
在每个扩展类中.
您可以使用模板方法模式:
public abstract Stuff
{
public abstract void doStuff();
public void doTheCommonPart() {
// ...
}
// Template method
public final void doIt() {
doTheCommonPart();
doStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您的客户端类只需调用模板方法doIt()
.它将执行公共代码部分,以及抽象方法的具体实现doStuff()
.
任何一个:
将公共代码放在类中的一个protected
方法中,Stuff
并从 的每个实现中调用它doStuff
;或者
将公共代码添加到您的抽象Stuff
类并调用另一个抽象方法。
例如(1)
public abstract Stuff
{
public abstract void doStuff();
protected void commonCode()
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
或 (2)
public abstract Stuff
{
public void doStuff()
{
// Do the common stuff initially...
// ...
// Then call the subclass implementation
doRealStuff();
}
public abstract void doRealStuff();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
569 次 |
最近记录: |