これが問題です。私は 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
}
}