java - 复合图案的正确使用

标签 java design-patterns uml class-diagram composite

我目前正在学习软件工程类(class)(我必须这样做)。 我们有一大堆任务需要我们使用 Java 中的设计模式。通常我只是一名 PHP 开发人员,所以我对 Java 的技能不多,这可能是一个问题。

具体问题是:我们必须使用复合模式来解决以下问题:创建一个数学框架来解决术语。该术语可以是数字(双)或连接两个术语的“/”、“-”,或使用一个术语的“sin”。

我必须创建一个 UML 类图。 这是哪个

enter image description here

我不确定这是否正确。我对类图的两个主要问题是:

  1. 对于复合 Material 使用值和第一/第二是否正确,因为它们只有 1 或 2 个术语,或者我应该使用 add 方法创建一个列表并确保准确无误列表中的 1/2 项?
  2. 我应该为复合结构(Sin、Divide、Subtract)创建另一个接口(interface)

我做得对吗,还是采取了错误/错误的方法?

谢谢

贝恩德

最佳答案

复合模式实际上并没有对如何表示复合节点的子节点施加任何限制。在您的情况下,您可以使用代表一元和二元运算的类,也可以为每个操作使用单独的类。

第二个选项看起来像:

interface Term {
    double getValue();
}

class Constant implements Term {
    private double value;
    public double getValue() {
        return value;
    }
}

class Divide implements Term {
    private Term numerator;
    private Term denominator;
    public double getValue() {
        return numerator.getValue() / denominator.getValue();
    }
}

这可能是最接近 UML 的表示。在这种情况下,将子项建模为 List 没有任何优势。

我提到的另一个选项(我不推荐)是使用 UnaryOperationBinaryOperation 类,然后为操作。在这种情况下,操作枚举将包含实际的计算逻辑。我认为这对于您的需求来说不必要地复杂,除非您有大量操作。

关于java - 复合图案的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27944139/

相关文章:

java - 无法从与类相同的文件夹加载 xml

java - 如何对车辆进行分类——继承与接口(interface)

c# - Singleton 应该是可继承的还是不可继承的?

java - 设计一个带有统计数据的程序

c++ - IBM Rhapsody 中状态图终止连接器的理解

java - 选择 HQL 中不是父级的类别

java - 简单的Java泛型问题

c# - C# 中的通用标识映射。不想要公共(public)构造函数

android - 清洁架构中的混淆术语交互器

uml - 您对UML有何看法?