这是问题所在。我有一个抽象基类Editor
。我也有两个子类GraphEditor
和一个TreeMapEditor
。 TreeMapEditor
的实现基本上包装了GraphEditor
,现在基本上将所有请求转发到基础GraphEditor
。
class TreeMapEditor extends Editor{
private final Editor wrappedEditor = createWrappedEditor();
private createWrappedEditor(){
return new GraphEditor();
}
public void doA(){ //This is the abstract class defined in Editor.
wrappedEditor.doA();
}
public void doB(){ //This is the abstract class defined in Editor.
wrappedEditor.doB();
}
public Editor getWrappeEditor(){
return this.wrappedEditor ;
}
}
现在,我的想法是为
GraphEditor
重用代码,而不必真正地将GraphEditor
子类化(因此)。但是客户端代码被写入GraphEditor
的实现中,而不仅仅是Editor
。如何在此处重构此代码?我希望所有属于Editor
的呼叫都通过TreeMapEditor
,并且只希望更具体的呼叫通过GraphEditor
。客户端代码现在看起来像这样:
public clientCode(Editor editor){
GraphEditor graphEditor = (GraphEditor)editor;
graphEditor .doA(); //This method belongs to Editor()
graphEditor .doB(); //This method belongs to Editor()
graphEditor .doC(); //This method belongs to GraphEditor() only and not to TreeMapEditor
graphEditor .doD();//This method belongs to GraphEditor() only and not to TreeMapEditor
}
}
最佳答案
您可能想要在GraphEditor和您的另外两个之间寻找一个概念。您正在执行的操作中是否有一个结构可以由扩展GraphEditor的类表示,而不是功能齐全的GraphEditor或TreeMapEditor?如果存在,则可能会包含通用代码。
但是我会小心地继续在问题空间中实现某种表示,而不是仅仅将方法放入继承层次结构中的类中,因为这是您需要它们的地方。这种自下而上的创建类的样式会导致糟糕的设计,直到有人说“哦,他只是想在这里使用此方法”之前,否则很难理解。