これが問題です。私は 1 つの抽象基本クラスを持っていEditor
ます。また、2 つのサブクラスGraphEditor
とTreeMapEditor
. の実装はTreeMapEditor
基本的に a をラップし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
}
}