了解构建器/工厂模式

时间:2014-06-18 14:41:57

标签: java design-patterns factory builder

我试图清理一些我为阅读数据而编写的代码。我有两个数据源:数据库和文件。两者目前都有单独的类,并且两个类在提供的构造函数中都有可选的非常见参数(目前是传统的telescoping构造函数)。这两个类实现接口 MyData ,当我实例化对象时,我总是实例化一个 MyData 对象。

我想将这些类合并到一个类中,并使实例化尽可能干净,但我无法弄清楚如何。我确定它是构建器和工厂模式的混合。用户永远不必看到基础类型 MyDatabaseData MyFileData ,只需 MyData 。有人可以通过草拟一个类似的例子来帮助我,只是为了让我走向正确的方向

2 个答案:

答案 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个阶段并行演变。

相关问题