2015-04-01 76 views
0

我真的被困在這裏。我試圖添加一個新的數據庫,除了當前的。我打算使用工廠模式來選擇正確的數據庫控件,如下所示:重新設計搜索引擎,應用什麼設計模式

private AssetStoresFactory assetStoresFactory; 

AssetStore assetStore = assetStoreFactory.getAssetStore(query); 
assetStore.search(search); 

public AssetStore getAssetStore(String query){ 
AssetStore assetStore; 
if (qualifiesForStoreA(query)) 
    assetStore = new AssetStoreA(); 
else 
    assetStore = new AssetStoreB(); 
return assetStore; 
} 


AssetStore A 
..... 
Results search(AssetSearch search) { 
AssetSearchOperation o = new AssetSearchOperationA(search); 
} 
..... 


AssetStore B 
..... 
Results search(AssetSearch search) { 
AssetSearchOperation o = new AssetSearchOperationB(search); 
} 
..... 

現在真正的問題在於此。執行搜索目前的方法是這樣的:

    _______________________ 
        | BaseSearchOperation | 
        | ___________________ | 
        | abstract search() | 
        ----------------------- 
          ᴧ 
          | 
        ____________________ 
        | StreamingSupport | 
        |__________________| 
          ᴧ 
          | 
        ______________________ 
        |AssetSearchOperation| 
        |____________________| 

現在有代碼來查詢當前數據庫中的所有上述類別的,這需要刪除和隔離。我無法理解如何做到這一點。請注意,AssetSearchOperation的匿名實現會覆蓋StreamingSupport。 任何幫助表示讚賞!如果您需要更多信息,請不要問!

+0

也許'BaseSearchOperation'應該是數據庫不可知的,並且所有泛型代碼都是用子類來表示的。很難說,代碼真的很神祕,而且你沒有給出很多的上下文。 – guillaume31 2015-04-01 13:57:00

回答

0

參數化AssetStore帶有數據庫連接實例的構造函數,並在工廠方法內部傳遞特定實例。