我有以下课程:
public class A {
private String a;
private Long b;
private Date c;
//getters, setters, constructors
}
我需要能够将其导出为具有不同模板的Excel。 例如,一个excel具有以下标头: a b c
另一个excel有以下模板: b a c
另一个模板可能如下所示: b a
设计代码的好方法是什么,以便我可以根据一个模板或另一个模板格式化A对象?我可以看一下特定的设计模式吗?
答案 0 :(得分:2)
我认为你可以使用Adapter模式,你需要为不同的模板制作不同的适配器。
使用适配器绑定对象,适配器中的某些逻辑会将传递对象的值分配给要填充值的模板。
通过制作适配器,您可以在不更改现有格式的情况下制作新格式,这将使代码更易于维护和分离。
这只是一个粗略的概念,这里可以应用哪个概念,你仍然可以在其中进行许多修改。
适配器接口
public interface Adapter {
}
适配器类
public class Format2Adapter implements Adapter {
private Long title;
String subtitle;
public void fillTemplate(Core c){
title = c.getB();
}
}
Format2Adapter类
public class Format2Adapter implements Adapter {
private Long title;
String subtitle;
public void fillTemplate(Core c){
title = c.getB();
}
}
业务对象类
import java.util.Date;
public class Core {
private String a;
private Long b;
private Date c;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public Long getB() {
return b;
}
public void setB(Long b) {
this.b = b;
}
public Date getC() {
return c;
}
public void setC(Date c) {
this.c = c;
}
// getters, setters, constructors
}
答案 1 :(得分:1)
你可以使用很多设计模式,但是,乍一看(这也是个人品味的问题),似乎Strategy设计模式非常合适。
我会做的是将所有不同的模板实现为不同的导出策略,这将实现基本接口(或扩展基类,以防有一些常见功能):
public interface ExportStrategy {
public void export(A a);
}
子类可能实现不同的策略:
public class ABCExportStrategy {
...
}
public class BACExportStrategy {
...
}
等
A
类,然后变为:
public class A {
// all the code you wrote in the question body goes here ...
public void export(ExportStrategy strategy) {
strategy.export(this);
}
}
或者,您可以将策略设置为A类的状态:
public class A {
// all the code you wrote in the question body goes here ...
private ExportStrategy strategy;
// setter for the strategy
public void export() {
strategy.export(this);
}
}
答案 2 :(得分:0)
KISS:
public class A {
private String a;
private Long b;
private Date c;
//getters, setters, constructors
public void ExportData(Template template){
switch (template.type){
case t1:
formatT1();
break;
case c2:
formatT2();
break;
default:
defaultBehavious();
}
}