簡體   English   中英

如何修復客戶端代碼,以便通過組合獲得代碼重用?

[英]How can I fix the client code so that I get code reuse via composition?

這是問題所在。 我有一個抽象基類Editor 我也有兩個子類GraphEditorTreeMapEditor 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? 如果存在,則可能會包含通用代碼。

但是我會小心地繼續在問題空間中實現某種表示,而不是僅僅將方法放入繼承層次結構中的類中,因為這是您需要它們的地方。 這種自下而上的創建類的樣式會導致糟糕的設計,直到有人說“哦,他只是想在這里使用此方法”之前,否則很難理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM