【发布时间】:2009-12-16 13:59:39
【问题描述】:
我有一个带有字段的对象。 在一个项目中,我需要这个充满信息的对象。
谁负责填充这个对象?
我想要一个像 getFilledObject() 这样的方法,它可以向我的程序返回一个完全填充的对象。
我可以把这个逻辑放到主流程中,“就地”填充它,我也可以把这个方法添加到类本身,让它知道如何根据我传递的参数来填充自己。 后一个决定已经足够好了,唯一的问题是该类必须比简单的普通 get-set 类更了解它的性质。
但我觉得这两个决定都不够好。应该是什么?只包含填充对象的逻辑的帮助类?
你知道,是的,Factory 是我一直在寻找的东西,但它总是与多态性一起被提及。就我而言,我根本不需要它。所以我可以称它为工厂,但它真的是他们所说的“工厂模式”吗?
那么我们有什么结果呢? 一、静态工厂方法
A类{ 对象类型 1 对象 1; 对象类型 2 对象 2; 公共 A() {} 公共静态getA(int param1,int param2){ 一个=空; objType3 obj3 = null; if (somelib.complexCheck(param)) { obj3 = someotherlib.getSomething(param2); // 其他的东西 } 如果(obj3!= null){ // 用 getter 和 setter 做一些事情,填充一个 } 返回一个; }和工厂模式或类似的东西
类事实{ 公共静态A getA(int param1,int param2){ // 在这里做所有的事情 } }在我看来,在静态工厂方法的情况下,A 类中有很多导入指令。此外,如果所有这些都需要相同的库,我们可以将类似的静态方法放入 Fact 类中。
你会在两者之间选择什么?
【问题讨论】:
-
“问题是这个类必须比一个简单的get-set类更了解它的本质”这是一个“问题”?真的吗?你在说什么?如何——确切地说——这是一个问题?这听起来像是一个类的基本定义:它在一个地方拥有所有的责任和知识。你在说什么“问题”?你能澄清你的问题吗?
-
好的,假设我必须检查我要查找的对象是否在 HttpSession 中。如果是这样,我可以检查它是否完好或损坏。然后,如果它不存在,我必须查询数据库并构造一个复杂对象,然后返回对它的引用。我觉得将 getter/setter 解耦并提取这些信息在这里会是一个更好的主意。你怎么看?
标签: java