【发布时间】:2015-06-05 19:27:12
【问题描述】:
我真的被困在这里了。我正在尝试在当前数据库之外添加一个新数据库。我将使用工厂模式来选择正确的数据库控件,如下所示:
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。 任何帮助表示赞赏!如果您需要更多信息,请询问!
【问题讨论】:
-
也许
BaseSearchOperation应该与数据库无关,并且所有通用代码都在其中,并带有用于具体细节的子类。很难说,代码真的很神秘,而且你没有给出很多上下文。
标签: design-patterns architecture factory command-pattern