我试图清理一些我为阅读数据而编写的代码。我有两个数据源:数据库和文件。两者目前都有单独的类,并且两个类在提供的构造函数中都有可选的非常见参数(目前是传统的telescoping构造函数)。这两个类实现接口 MyData ,当我实例化对象时,我总是实例化一个 MyData 对象。
我想将这些类合并到一个类中,并使实例化尽可能干净,但我无法弄清楚如何。我确定它是构建器和工厂模式的混合。用户永远不必看到基础类型 MyDatabaseData 和 MyFileData ,只需 MyData 。有人可以通过草拟一个类似的例子来帮助我,只是为了让我走向正确的方向
答案 0 :(得分:1)
将课程分开,因为他们做了不同的事情。将它们结合起来只会造成巨大的混乱并违反单一责任原则。
如果您不希望用户看到这些类,请将类包保密。
然后创建一个新的Builder或Factory类,它接受参数并确定要实例化的类。
希望这有帮助。
答案 1 :(得分:0)
构建器模式如下所示:
MyDatabaseData data = MyDatabaseData.create()
.authenticate("admin", "rumpelstielchen")
.get();
public class MyDatabaseData {
private MyDatabaseData() { }
public static MyDatabaseBuilder create() {
return new MyDatabaseBuilder(new MyDatabaseData());
}
}
public class MyDatabaseBuilder {
private MyDatabaseData data;
MyDatabaseBuilder(MyDatabaseData data) {
this.data = data;
}
public MyDatabaseData get() {
return data; // Do checks and yield the final result
}
public MyDatabaseBuilder authenticate(String user, String password) {
...
return this; // For chaining calls
}
}
是否使用公共基类/接口是一个适用性问题:
public class MyDatabaseBuilder extends MyBuilder<MyDatabaseData>
但是你可能需要做特定的事情,因此需要孩子课程。发展不一定会变得更容易,维持4个阶段并行演变。