Java类接口(interface)设计题

标签 java oop design-patterns

我有一个类 (MiddleMan) 与系统对话,这个对话由 MiddleMan 的客户初始化。

如果“对话”成功完成,MiddleMan 将生成一个 token 并将其返回给其客户端。

我现在的类设计如下:


class MiddleMan{
    private String token = null;
    private String param1;
    private String param2;
    private String amount;

    boolean isTalkSuccessful = false;

    public MiddleMan(String param1, String param2){
    this.amount = amount;
    this.param1 = param1;
    this.param2 = param2;
    }

    public String talk() throws ValidationException{

      //a private method validates param1 and param2
    validateParameters();

     //talk to backend system;
    isTalkSuccessful = talkToSystem();


    }

    Private void validateParameters() throws ValidationException {

    }

    private boolen talkToSystem(){

    }


    public boolean isTalkSuccessful(){
      return isTalkSuccessful;
    }

    public String getToken() throws Exception{
       if(isTalkSuccessful()){
          return token;
      }else{
        throw new Exception("cannot return token because talk is not  successful");
      }

     }



}

这对你来说合适吗?你会如何重构它?

最佳答案

  1. 数量 发挥作用的地方。它不在实例变量列表中,也不在构造函数参数中。您需要在代码段中修复此问题以避免混淆。
  2. 参数的验证应该在构造函数中完成。如果参数无效,则从构造函数中抛出一些适当的异常。 talk() 方法不应验证,正如其名称所暗示的那样。
  3. 我可以看到您正在调用 getToken() 中的 isTalkSuccessful() 方法。我假设您希望客户端在调用 getToken() 之前检查它以避免异常。不是吗?并且您已准备好检查以防万一客户端未调用 isTalkSuccessful()。正确的?所以,如果避免异常是重点,为什么不抛出任何异常呢?让我们去掉那个公共(public)方法 isTalkSuccessful() 并让客户端调用 getToken()。在您的 getToken() 方法中,检查私有(private)字段 isTalkSuccessful,如果为假,则返回 null。为什么不呢?
  4. 你真的需要setToken()吗?谁将调用它?

关于Java类接口(interface)设计题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4241573/

相关文章:

ios - 将可变类更改为不可变类

php - 面向对象的 MySQL 语句,PHP

java - 如何在 JFreeChart 折线图中显示数据库值

java - 使用 FT 搜索检索父文档时出现延迟

java - 从 Pacs 服务器检索 Dicom 图像

javascript - 调用javascript对象自身的属性

oop - 面向对象的分析与设计

c# - 获取对象结构差异和统计信息的模式或如何创建差异工具

objective-c - XCode 4 - 创建 AppController 标准?

java - 声音 API 与外部程序 - 质量