Abr*_*ris 5 java design-patterns
我目前正在阅读有关设计模式及其用途的内容。我正在尝试找到一种设计模式来重构我当前的代码。
问题:
将来自多个不同源的数据按一定顺序加载到一个大的 JavaBean 中。数据是根据一些简单的初始标准加载的。从第一个源返回的数据将为下一个源建立标准。
某些数据源可能不会返回任何数据。这可能不会停止 JavaBean 的加载过程,但根据某些逻辑,加载过程可能会跳过某些数据源,因为它没有足够的条件来查询。
目前的解决方案:
BigJavaBean Class
Run Code Online (Sandbox Code Playgroud)
每个加载器类都包含访问每个源 DAO 的方法
对每个 DAO 的查询都是根据 BigJavaBean 中的属性构建的
每个加载器类中都有逻辑来确定其是否“已加载”
LoaderClassDataBase for BigJavaBean
LoaderClassFlatFiles for BigJavaBean
LoaderClassXmlFiles for BigJavaBean
LoaderClassWebService for BigJavaBean
... and so on
MainLogicClass
BigJavaBean bigJavaBean = new BigJavaBean();
populateBigBeanMethod() {
loaderClassDataBase(bigJavaBean);
if (loaderClassDataBase.isLoaded()) {
loaderClassFlatFiles(bigJavaBean);
if (loaderClassFlateFile.isLoaded() {
loaderClassXmlFiles(bigJavaBean);
}
}
... more if statements
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
小智 2
这是责任链模式
abstract class BigJavaBeanLoader {
private final BigJavaBeanLoader successor;
public BigJavaBeanLoader() {
this.successor = null;
}
public BigJavaBeanLoader(BigJavaBeanLoader successor) {
this.successor = successor;
}
public void loadData(BigJavaBean bean) {
if (this.loadDataFromSource(bean) && this.successor != null) {
this.successor.loadData(bean);
}
}
protected abstract boolean loadDataFromSource(BigJavaBean bean);
class DataBase extends BigJavaBeanLoader {
@Override
protected boolean loadDataFromSource(BigJavaBean bean) {
// do a database stuff
return true;
}
}
class FlatFiles extends BigJavaBeanLoader {
@Override
protected boolean loadDataFromSource(BigJavaBean bean) {
// do flat files stuff
return true;
}
}
}
BigJavaBean bigJavaBean = new BigJavaBean();
BigJavaBeanLoader loader;
loader = new BigJavaBeanLoader.FlatFiles();
loader = new BigJavaBeanLoader.DataBase(loader);
loader.loadData(bebigJavaBean);
Run Code Online (Sandbox Code Playgroud)