2012-12-09 94 views
1

我想創建一些抽象工廠模式的變體。
該工廠應該允許插入式的插入新的具體工廠實施。動態加載抽象工廠

例如

public class AbstractFactory 
{ 
    //some code here 
    public static void addNewImpl(String implName, /*class path or something else*/) 
    { 
    //dynamic class validity check 
    //save class somehow (db I guess) 
    } 

    public static getImpl(String name) 
    { 
    //is impl available 
    //return if valid 
    } 
} 

我不確定我是否正確處理了問題,或者是否應該重新考慮我的設計。

+1

您的抽象工廠不抽象,也不編譯。這是如此的空虛,如果它設計得很好或者沒有,基本上是不可能的(至少對我來說)是不可能的。 –

+0

我想動態添加具體的工廠實現。代碼只是一個普遍的想法。我知道這不是抽象工廠應該看起來像 –

+0

使用彈簧? – Stefan

回答

2

我會繼續這樣的:

  • 讓你的代碼編譯:-)
  • 您需要定義一個工廠接口,建立你的目標對象
  • 當你的等級,通常會加載在應用程序啓動時,您的DelegateFactory(您稱爲AbstractFactory)在啓動時從類路徑中讀取一個屬性文件即可。
  • 對於屬性文件中的每個條目,使用鍵作爲lokup並將類名作爲條目的值。
  • 坐退
+0

我想我會用這個解決方案。我應該在什麼時候更換這個簡單的機制,以獲得更好的機制,比如JPF? –

+1

我不知道我可以幫助做出這個決定,因爲我對您的要求一無所知。我認爲目前的解決方案應該證明你的概念。可能當您想讓最終客戶端選擇並下載其他組件時,您將不得不重新執行該實現。我從來沒有起訴過JPF,但它似乎是OSGI的一個更老的和封閉的(具有所有優點和劣勢)版本。 – Stefan