1
我有4 Classes
其實施相同Interface
。這些類是e.g代碼重構。類實現相同的接口
ABC
,XYZ
,LMN
,現在LMN
類的實例可以belongTo
的XYZ
意味着實例也可以是一個子對象。如果一個對象是一個孩子obect那麼它不應該有所有的方法作爲獨立對象可用,或者它的功能會有細微的差異。
什麼是通常最好的實踐來處理這樣的sitution。
我有4 Classes
其實施相同Interface
。這些類是e.g代碼重構。類實現相同的接口
ABC
,XYZ
,LMN
,現在LMN
類的實例可以belongTo
的XYZ
意味着實例也可以是一個子對象。如果一個對象是一個孩子obect那麼它不應該有所有的方法作爲獨立對象可用,或者它的功能會有細微的差異。
什麼是通常最好的實踐來處理這樣的sitution。
這看起來可能違反直覺,但您可能想要考慮實施第二個接口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
中的方法。
我們是否在談論繼承與組合這裏的組合? – biziclop 2015-03-19 10:14:00
我會說,處理這種情況的最佳做法是避免它們。 – Antoniossss 2015-03-19 10:17:35
我不認爲這種模式是你應該完全避免的。不過,我會盡量少用它,因爲它可以用更簡單更直觀的模式取代。然而,如果你真的需要使用這個模式,而不是你可以擁有的方法,那麼你將無法阻止孩子中的某些方法。if(!hasParent()){\ * do something * \}' – Neilos 2015-03-19 10:36:21