我堅持一個規劃問題:AbstractFactory與扭曲
我有兩個的Java項目,在我的Eclipse IDE:項目A和項目B。 項目B引用項目A
我已經宣佈在項目A類:ClassA的,一個在項目B:ClassB的,使得:
public class ClassA{
public static Object foo(){
//blah
}
}
public class ClassB extends ClassA{
public static Object foo(){
//blah
}
}
我也有一個名爲ClientClass,在項目A類。此ClientClass早期用於創建ClassA的實例並使用它。但現在,基於環境設置,ClientClass應該提供使用ClassA或ClassB的選項。
這似乎是AbstractFactory模式的一個問題,或者我想。 我需要創建一個工廠,提供對ClassA或ClassB的訪問。 ClientClass不應該知道它是ClassA或ClassB。這要求我爲ClassA和ClassB創建一個接口。
問題我跑進:
- ClientClass不能引用ClassB的直接(不導入語句/或新的調用),因爲ClassB的是在不同的項目。這可能是Eclipse IDE的限制,但在將這兩個項目作爲jar文件查看時,對我來說也是有意義的。循環關係是可以避免的。
- 我無法爲ClassA Class A & ClassB創建Factory接口和通用接口,然後通過AbstractFactory模式提供ClassAFactory或ClassBFactory。這是因爲要在ClassA和ClassB上調用的方法是靜態方法。這些類上的方法需要存在於接口上。但是,在Java中,不能有「抽象靜態」修飾符
任何人都可以爲這個問題提出一個優雅的解決方案嗎?
Chris,感謝您的詳細回覆。是的,擁有非靜態方法定義將有助於動態調度,但是我必須保持靜態方法 - 這是我無法改變的設計決策。 我需要可能設計一個完全不同的機制,我可以將呼叫路由到ClassA或ClassB。 –
我終於決定清理亂七八糟的靜態修飾符,並採用動態類加載的動態調度標準解決方案。將此答案標記爲正確答案。謝謝:) –
@Kiran快樂的幫助!對不起,這不是你想要的答案... –