如果工厂模式强制您使用默认构造函数,那么应该如何设计需要参数化构造函数的类接口?

PhD*_*PhD 1 java oop spring design-patterns factory-pattern

我有一组需要从DAOFactory获取的DAO(数据访问对象)(使用工厂方法模式).

现在我们有了DAO必须始终用参数初始化的情况,例如:(带字符串参数)

MyDataDAO myDAO = new myDAO("myProject", "myProjectWallName");

现在,拥有一堆DAO需要我们重构(使用工厂模式),这里是冲突的力量:

  1. 如果我们重构我们的DAO不使用任何默认参数(可能是一件好事),我们可能需要为必须初始化的强制成员设置setter/getter.暗示可能无效的检查/断言遍布整个过程(坏事IMO)
  2. 另一种方法是强制DAO的每个方法携带相应的强制参数以及它们已有的(太多数据/长参数列表 - 可能不好但可能是唯一的选择?)
  3. 用春天!好吧,我们为一些纯粹无状态的DAO做了,它们确实不需要设置任何默认值.但我不认为Spring真的支持运行时构造函数 - 参数初始化,因为它在启动时创建并缓存对象.所以回到原点(Spring可能支持这个,但我真的还没有找到任何关于这个.帮助?:)

那么应该如何为使用工厂实例化的类设计一个"良好"的接口,即在这方面要遵循的最佳实践.到目前为止,我总是遇到非参数化构造函数的情况,我觉得有一个有效的需要/原因来获得参数.我个人觉得只有一个默认的构造函数并通过setter-getters设置所有东西是很糟糕的,打败了目前存在的构造函数来解决!

困惑...

Bjö*_*lex 8

我没有看到为什么工厂总是必须使用default-constructor的原因.的create-方法是完全免费拿,它贯穿于它调用构造函数的参数.或者,工厂可以将参数存储在成员变量中.这样,您可以确保使用相同参数创建使用此工厂创建的所有对象.