gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:09:37 25 4
gpt4 key购买 nike

这是一个通用的 OOP 问题,尽管我正在使用 Java 进行设计。我不是试图解决一个特定的问题,只是想通过一些设计原则。
根据我的经验,我已经养成了将对象设置分为三个阶段的习惯。

目标是尽量减少:额外的工作、混淆的代码和削弱的可扩展性。

build

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

  • 初始化
  • 使对象有用
  • 实例化和初始化可公开访问的成员
  • 实例化和初始化作为变量值的私有(private)成员
  • 对象现在应该通过外部测试而不会产生异常(假设代码是正确的)

  • 重置
  • 不实例化任何东西
  • 为所有变量公共(public)/私有(private)成员分配默认值
  • 将对象返回到精确状态

  • 玩具示例:
    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”方法的方式设计我的类。我认为一个类的所有方法,尤其是公共(public)方法,都应该保证对象在成功完成后始终处于“有效”状态,并且不需要调用其他方法。

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

    关于oop - 确定构造函数、初始化和重置方法的任务的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/592943/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com