Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:用于按特定顺序构建特定列的设计模式_Java_Design Patterns - Fatal编程技术网

Java:用于按特定顺序构建特定列的设计模式

Java:用于按特定顺序构建特定列的设计模式,java,design-patterns,Java,Design Patterns,我有一个N列的表(最多20-25列)。列列表(列及其顺序)由用户设置。所以这个列表在代码编写时是未知的 我有以下解决方案: class abstract AbstractColumnBuilder{ public TableColumn buildColumnA(){...} public TableColumn buildColumnB(){...} public TableColumn buildColumnC(){...} public TableColumn bu

我有一个N列的表(最多20-25列)。列列表(列及其顺序)由用户设置。所以这个列表在代码编写时是未知的

我有以下解决方案:

class abstract AbstractColumnBuilder{

  public TableColumn buildColumnA(){...}

  public TableColumn buildColumnB(){...}

  public TableColumn buildColumnC(){...}

  public TableColumn buildColumn(String columnName){
     switch(columnName){
         case "a":return buildColumnA();
         case "b":return buildColumnB();
         case "c":return buildColumnC();
     }
     return null;
  }
}

class ConcreteColumnBuilder extends AsbtractColumnBuilder{

 public TableColumn buildColumnD(){...}

 public TableColumn buildColumnE(){...}

 @Override
 public TableColumn buildColumn(String columnName){
     switch(columnName){
         case "d":return buildColumnD();
         case "e":return buildColumnE();
         default:return super.buildColumn(columnName);
     }
  }
}
以及用法

List<String>columnNames=...
for(String columnName:columnNames){
   TableColumn column=builder.buildColumn(columnName);
}
ListcolumnNames=。。。
for(字符串columnName:columnNames){
TableColumn column=builder.buildColumn(columnName);
}
然而,我不喜欢这个解决方案。首先,在我看来,从性能的角度来看,它不是很好——我们需要进行长案例检入循环。其次,开发人员可能忘记重写buildColumn方法


这种情况下是否有任何模式?

因此,根据字母的不同,列的构建方式也会有所不同,对吗?带有某种抽象构建方法的枚举可能是一种解决方案,或者对构建列XXX进行一些注释,并对构建映射XXX进行一些反射->method@JDC对因此,idea可以使用反射。我想说这是工厂设计模式的典型用例:我不是Java开发人员,但对于使用额外功能组合对象/类,最好使用mixin,以下是我对Java的发现:在您的案例中,当一个开发人员想要创建一个包含其他3个类的功能的类(用于构建列)时,他必须以某种方式从所有这些类继承方法。有了mixin,就更简单了。