用于组装不同数据的设计模式?

时间:2012-06-03 19:29:19

标签: java design-patterns

我正在设计一个系统,它在标准的行/列类型输出中组装不同的数据。

每列可以:

  • 存在于独立系统中。
  • 可以分页。
  • 可以分类。
  • 每列可包含数百万行。

系统:

  • 需要可扩展,以便输出不同列的不同表格。
  • 最终域对象已知(行)。
  • 所有系统的密钥都是不变的。

我当前的实现计划是每列设计两个类(或实现两个接口的一个类列)。接口将:

  1. 实施分页和排序。
  2. 实施“装饰”
  3. 这个想法是表构造函数将接收有关当前排序列和页面的信息。然后,将返回该表的适当键列表。此信息将用于创建域对象行的列表,然后将其依次传递给每个列“装饰”实现,以便可以依次添加每个列信息。

    我想我的问题是 - 建议使用哪种设计模式 - 或者人们使用其他设计决策来组装具有公共密钥和变量列的不同数据。

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解你要做的事情,但从我收集到的内容来看,你想要以一种允许你从中制作结构化表格的方式存储任意数据行它稍后。在这种情况下我会做什么(假设你正在使用Java)是一个非常简单的Column接口,它只有一个"值"属性:

public interface Column {
    String value;
}

然后,您可以通过实施Column来创建列:

public class Key implements Column {
    String value = new String();

    public Key(String keyValue){
        this.value = keyValue;
    }
}

那么你可以创建一个名为DataRow的类(或任何你喜欢的),其对象将包含实际数据。例如,您可以在该类中使用一个允许您添加数据的方法:

public class DataRow {

    List<Column> data = new ArrayList<Column>();

    public DataRow(String key){
        this.setColumn(new Key(key));
    }

    public void setColumn(Column columnData) {
        this.data.add(columnData);
    }

    public Column getColumn(Class column){
        for(Column c : this.data){
            if(c.getClass().equals(column)){
                return c;
            }
        }
        return null;
    }

}

如您所见,您可以通过为方法setColumn()提供一个新的Column对象来调用它。这将允许您将任何类型的任何数据添加到DataRow对象。然后,要创建一些表,您可以使用一个函数,该函数需要List DataRowsList个类,然后只返回包含该行数据的对象指定:

public List<DataRow> createTable(List<DataRow> data, List<Class<? extends Column>> columns){
    List<DataRow> table = new ArrayList<DataRow>();
    for(DataRow row : data){
        DataRow ret = new DataRow(row.getColumn(Key.class).value);
        for(Class column : columns){
            if(row.getColumn(column.getClass()) != null )ret.setColumn(row.getColumn(column.getClass()));
        }
        table.add(ret);
    }
    return table;
}

这将允许您创建&#34;使用您的数据的表格以及您希望包含在表格中的列。

请注意,我写这段代码是为了传达一个想法,而且此刻它非常混乱。但我希望这会以某种小的方式帮助你。

相关问题