使用实例成员的编码模式

时间:2017-07-25 07:56:10

标签: java design-patterns

假设我有一个名为CommandLineOperation的班级。该类访问api资源。因此,我定义了一个APIAccessor类型的实例成员。

class CommandLineOperation {
    APIAccessor apiAccessor;
    void create() {
        apiAccessor = new APIAccessor(email,password);
        //do work for creation
    }
    void update() {
        apiAccessor = new APIAccessor(email,password);
        //do work for update
    }
}

class APIAccessor {
    String email;
    String password;
    APIAccessor(email,password) {
        this.email = email;
        this.password = password;
    }
}

CommandLine中的操作很少,是在每个操作下实例化APIAccessor或使用CommandLineOperation类的构造函数创建一次的更好方法。例如

CommandLineOperation(String email,String password) {
    this.apiAccessor = new APIAccessor(email,password);
}

请让我知道或建议良好的编码设计模式。或者建议我任何参考书,以便我可以根据分析提高我的编码标准。提前谢谢。

1 个答案:

答案 0 :(得分:3)

答案是:取决于 - 关于您的背景/要求。

创建CommandLineOperation实例时创建ApiAccessor的好处:

  • 您可以创建不可变对象(通过使该字段成为最终)。这有很多优点 - 因为你总是知道这个字段是初始化的(理想情况下,你甚至可能想要验证ApiAccessor实际上是否有效且不包含错误的信息)
  • 您的其他方法可以专注于直接责任 - 而不用担心该字段是否已经初始化
  • 因此,单元测试也更容易 - 如果你需要模拟,你只需要提供一次一次的ApiAccessor对象 - 而不是每次调用其中一个&#时处理它34;实" CommandLineOperation的方法

缺点:

  • 你不能切换"给定CommandLineOperation对象的ApiAccessor
  • 如果你有数以百万计的这些物品闲置而不是你的,你就浪费了一些记忆

但是当你想到它时:无论如何,这些缺点在现实世界中都不是很大的问题。

关于所需凭据来自解析文件的注释:归结为依赖注入!

含义:CommandLineOperation类应该包含构造ApiAccessor实例的代码。该对象应该被注入(通过依赖注入框架) - 或者通过构造函数提供,例如。