尽管我正在使用 Java 进行设计,但这是一个通用的 OOP 问题。我不是试图解决一个特定的问题,只是想通过一些设计原则。
根据我的经验,我已经养成了将对象设置分为三个阶段的习惯。
目标是尽量减少:额外的工作、混淆的代码和削弱的可扩展性。
建造
- 创建有效对象所需的最少操作,通过存在测试
- 仅“一次”实例化和初始化,永远不会被覆盖,非变量对象在对象的生命周期内不会改变/变化
- 初始化最终成员
- 本质上是一个运行时存根
初始化
- 使对象有用
- 实例化和初始化可公开访问的成员
- 实例化和初始化作为变量值的私有成员
- 对象现在应该通过外部测试而不会产生异常(假设代码是正确的)
重置
- 不实例化任何东西
- 为所有变量公共/私有成员分配默认值
- 将对象返回到精确状态
玩具示例:
public class TestObject {
private int priv_a;
private final int priv_b;
private static int priv_c;
private static final int priv_d = 4;
private Integer priv_aI;
private final Integer priv_bI;
private static Integer priv_cI;
private static final Integer priv_dI = 4;
public int pub_a;
public final int pub_b;
public static int pub_c;
public static final int pub_d = 4;
public Integer pub_aI;
public final Integer pub_bI;
public static Integer pub_cI;
public static final Integer pub_dI = 4;
TestObject(){
priv_b = 2;
priv_bI = new Integer(2);
pub_b = 2;
pub_bI = new Integer(2);
}
public void init() {
priv_a = 1;
priv_c = 3;
priv_aI = new Integer(1);
priv_cI = new Integer(3);
pub_a = 1;
pub_c = 3;
pub_aI = new Integer(1);
pub_cI = new Integer(3);
}
public void reset() {
priv_a = 1;
priv_c = 3;
priv_aI = 1;
priv_cI = 3;
pub_a = 1;
pub_c = 3;
pub_aI = 1;
pub_cI = 3;
}
}