java - 使用哪种设计模式? (根据不同的图形api在客户端显示不同的图形)

标签 java design-patterns

我的应用程序有一个数据库层。在我的正面,我有图形向用户展示。我从数据库中获取必要的数据并在网站上显示该数据。当我从数据库获取原始数据时,我会处理我使用的 API(highcharts 等)的数据。我设计了类似的东西:

ChartDTO

所有图表实现的主界面。具有如下方法:

public Object getTotalUsersPieChart(DatabaseData databaseData);

HighChartsDTOImpl

ChartDTO 的实现。它的所有方法都返回 Object 类型变量。

在客户端,我直接将来自服务器端的数据提供给我的图形,而不需要在客户端进行任何预处理。

我的问题是: 我知道这里有一个设计错误,也许它不是 DTO 设计(至少我的架构是这么说的)

我如何设计该场景?

最佳答案

我建议你使用某种Factory图案。
您应该向客户传递有关您要创建的图表类型的“提示”,
并让 ChartFactory 为您创建它。
这是一个代码片段:

public class ChartFactory {
    
    public Chart createChart(ChartType, ChartParameters params) {
       Chart chart = ... //Creates a chart object based on type and ChartParameters
       return chart;
    }
}

你可以让这个工厂成为单例,
所以如果你需要做一些工厂初始化,你只需要做一次。 ChartParameters 应保存用于创建特定图表类型的对象的参数。
它可以是键和值的简单映射,即如下所示:

public class ChartParameters {
    private Map<String,Object> params = new HashMap<String,Object>();

    public Object getParam(String paramName) {
        return params.get(paramName);
    }

    //Add here more methods... maybe a CTOR that takes a map of params,
    //And a method to add a parameter
}

或者这可以有另一种实现。 您还可以决定为 Chart 的每个子类设置参数类(所有这些参数类都将扩展 ChartParameters),
但这可能会导致继承树出现某种重复。

总而言之,
通过这种方式,您需要发送到客户端的只是图表类型和参数,它将实例化正确的图表对象。

关于java - 使用哪种设计模式? (根据不同的图形api在客户端显示不同的图形),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12454870/

相关文章:

java - 在 Spring bean 中实现空对象设计模式

具有两个整数操作数的 Java 除法不起作用?

java - 抽象 : create different releases from same sources

algorithm - 用于技术分析指标的 Kotlin

design-patterns - 如何在 Swift 中将对象映射到枚举而不引发异常

java - Controller 的设计方法

java - 正则表达式捕获 Java 中的所有单词和 "i' m you’re 等

java - 使用递归函数在 Java 中进行垃圾收集

java - 使用新参数在循环中创建新线程

c# - DTO/POCO 是否应该在所有属性上都有构造函数和私有(private) setter ?