2015-03-19 75 views
1

我有4 Classes其實施相同Interface。這些類是e.g代碼重構。類實現相同的接口

ABCXYZLMN,現在LMN類的實例可以belongToXYZ意味着實例也可以是一個子對象。如果一個對象是一個孩子obect那麼它不應該有所有的方法作爲獨立對象可用,或者它的功能會有細微的差異。

什麼是通常最好的實踐來處理這樣的sitution。

+2

我們是否在談論繼承與組合這裏的組合? – biziclop 2015-03-19 10:14:00

+1

我會說,處理這種情況的最佳做法是避免它們。 – Antoniossss 2015-03-19 10:17:35

+0

我不認爲這種模式是你應該完全避免的。不過,我會盡量少用它,因爲它可以用更簡單更直觀的模式取代。然而,如果你真的需要使用這個模式,而不是你可以擁有的方法,那麼你將無法阻止孩子中的某些方法。if(!hasParent()){\ * do something * \}' – Neilos 2015-03-19 10:36:21

回答

0

這看起來可能違反直覺,但您可能想要考慮實施第二個接口ChildInterface,即Interface。把那些你想要的方法的子集放在那兒。

public interface ChildInterface{ 

    ... 
} 

public interface Interface extends ChildInterface{ 

    //add methods you don't want Children to have 
} 


public class XYZ implements Interface{ 
    ... 
} 
Interface接口或 XYZ

然後,有一個方法

public ChildInterface getChild(); 

由於所有的類都實現兩個接口,這將編譯就好了,它會保證返回的對象僅限於只有ChildInterface中的方法。

相關問題