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

时间:2012-09-17 07:32:59

标签: java design-patterns

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

ChartDTO

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

public Object getTotalUsersPieChart(DatabaseData databaseData);

HighChartsDTOImpl

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

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

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

我如何设计这种情景?

2 个答案:

答案 0 :(得分:1)

我建议您使用某种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),
但这可能会导致您在继承树上出现某种重复。

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

答案 1 :(得分:0)

听起来你是一个因素模式甚至是一个抽象的工厂模式。使用此工厂,您可以生成为所需外观配置的相应组件。