确定构造函数、初始化和重置方法的任务的最佳实践是什么

2023-12-08

尽管我是用 Java 设计的,但这是一个常见的 OOP 问题。我并不是想解决某个特定问题,只是想思考一些设计原则。
根据我的经验,我养成了将对象设置分为三个阶段的习惯。

目标是最大限度地减少:额外的工作、混乱的代码和受损的可扩展性。


建造

  1. 所需采取的最少行动 创建一个有效的对象,传递一个 存在性测试
  2. 仅实例化和初始化“一次”,永远不会被覆盖,非变量对象在对象的生命周期内不会改变/变化
  3. 初始化最终成员
  4. 本质上是一个运行时存根

初始化

  1. 让对象变得有用
  2. 实例化并初始化可公开访问的成员
  3. 实例化并初始化作为变量值的私有成员
  4. 对象现在应该通过外部测试而不会生成异常(假设代码正确)

Reset

  1. 不实例化任何东西
  2. 为所有变量公共/私有成员分配默认值
  3. 将对象返回到精确状态

一个玩具示例:

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;
   }  
}

我会以一种不需要“init”方法的方式设计我的类。我认为类的所有方法,尤其是公共方法,应该保证对象在成功完成后始终处于“有效”状态,并且不需要调用其他方法。

对于构造函数来说也是如此。创建对象时,应将其视为已初始化并准备好使用(这就是构造函数的用途,并且有许多技巧可以实现此目的)。否则,安全使用它的唯一方法是检查该对象是否已在每个其他公共方法的开头进行初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定构造函数、初始化和重置方法的任务的最佳实践是什么 的相关文章

随机推荐