Design patterns 重新设计搜索引擎,应用什么设计模式

Design patterns 重新设计搜索引擎,应用什么设计模式,design-patterns,architecture,factory,command-pattern,Design Patterns,Architecture,Factory,Command Pattern,我真的被困在这里了。我正在尝试在当前数据库的基础上添加一个新数据库。我将使用factory模式选择正确的数据库控件,如下所示: private AssetStoresFactory assetStoresFactory; AssetStore assetStore = assetStoreFactory.getAssetStore(query); assetStore.search(search); public AssetStore getAssetStore(String query){

我真的被困在这里了。我正在尝试在当前数据库的基础上添加一个新数据库。我将使用factory模式选择正确的数据库控件,如下所示:

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|
                    |____________________|
现在真正的问题就在这里。当前执行搜索的方法如下所示:

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。
感谢您的帮助!如果您需要更多信息,请务必询问

使用数据库连接实例参数化
AssetStore
构造函数,并在工厂方法内传递特定实例。

也许
BaseSearchOperation
应该与数据库无关,并且在所有泛型代码所在的位置,使用子类进行详细说明。很难说,代码真的很神秘,而且你没有给出很多上下文。