java - 选择哪种设计? - 优点和缺点

标签 java design-patterns

会选择这 3 种方法中的哪一种?为什么?

// This is the one I would choose

class Car {

}

class FeeCalculator {

    public double calculateFee(Car car) {
        return 0;
    } 
}
<小时/>

//在这种情况下,问题可能出在我们使用 ORM 框架并尝试使用参数 Car 调用 save 时

class Car {

    private FeeCalculator calculator;

    public double calculateFee() {
        return calculator.calculateFee(this); 
    }
}

class FeeCalculator {

    public double calculateFee(Car car) {
        return 0;
    }
}
<小时/>

//这样的话上面提到的问题就解决了,但是我不喜欢这个设计

class Car {

    public double calculateFee(FeeCalculator calculator) {
        return calculator.calculateFee(this); 
    }
}

class FeeCalculator {

    public double calculateFee(Car car) {
        return 0;
    }
}

最佳答案

我投票给第一个。这种计算器不是汽车的一部分,汽车通常没有计算费用的能力。

第二个设计模型类似于car-has-a-calculator,第三个选项接近car-is-a-calculator(尽管它委托(delegate)了计算到另一个类)。

<小时/>

此外,ORM 框架不应该影响模型的架构。该模型应该反射(reflect)“现实世界”,有足够的专家可以在任何 ORM 框架中实现该模型。

关于java - 选择哪种设计? - 优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008392/

相关文章:

java - 我们可以有一个工厂类作为 spring bean 并有一个工厂方法根据条件返回多个 spring bean 吗?

java - 从 JAR 中提取并加载 DLL

java - 如何隐藏 vaadin 树表中的展开/折叠图标?

javascript - Spring Boot 通过嵌入式 Tomcat 在 web-application.jar 之外提供外部 HTML/javascript/css 服务?

c++ - 具有多个继承共享一个资源的对象 - 寻找好的设计模式

java - 实现 java.util.Observer 的类中的所有静态成员?

android - SQLite 数据库中的大字符串对象

java - 问答游戏设计模式

java - Selenium Webdriver - 元素不可见

java - HashMap 保存旧值