下面的代碼工作得很好,當所有涉及的類都在同一個項目(determineSubClass
是BaseClass
成員):如何扭轉依賴的類工廠搬到了圖書館
protected static BaseClass determineSubClass(String p1, int p2, Boolean p3) {
BaseClass baseObj = null;
if ((baseObj = SubClassOne.ofType(p1, p2, p3)) != null)
return baseObj;
else if ((baseObj = SubClassTwo.ofType(p1, p2, p3)) != null)
return baseObj;
else if ((baseObj = SubClassThree.ofType(p1, p2, p3)) != null)
return baseObj;
else if ((baseObj = SubClassFour.ofType(p1, p2, p3)) != null)
return baseObj;
else
return new SubClassDefault(p1, p2, p3);
}
但現在,我想將BaseClass
移動到共享庫項目中,其中SubClassOne
,SubClassTwo
,SubClassThree
和SubClassFour
爲而不是定義在庫中,而是在使用此庫的應用程序中。
我當然可以移動BaseClass
回每使用這個庫的每一個應用程序,但我不知道:
- 有沒有更好的解決辦法?
- 有沒有可以讓我 保持
BaseClass
在圖書館 項目,並無需爲它 瞭解來源於它所有超 的解決方案?
EDIT(回答@ahmet ALP巴爾幹以下問題):
每個子類的ofType()
做兩兩件事:
- 確定,基於 字符串P1和其它的內容參數 p2和p3,子類,以 被實例化是否其類型。
- 如果答案是肯定的,它 實例自 子類的對象。否則,返回null。
關於你的第二個問題,BaseClass
在這一點上持有共同的數據成員和方法,其目的是在確定委託子類實例化的責任,所有子類,只有這一個靜態方法。
BTW,感謝你的問題,我在我原來的職位發現一個可怕的錯字:「SuperClassOne」應爲「SubClassOne」等
什麼呢'ofType'方法做,你可以給我們BaseClass'的'定義。我無法得到你想在這裏實現的目標。 –
@ahmet alp balkan看到我上面的編輯。感謝和+1指出我的問題中不清楚的部分。 – ef2011