你的需求是典型的适配器模式,业务比较简单,需要重复定义多个是配置,一类功能定义一个比较合适
我理解的思路是这样:
读入映射配置文件(可以是XML,也可以是数据库)
配置文件记载转换field赋值转换规则
new 目标对象,反射赋值,返回
public <T, E> T convert(E e, Class<T> t) {
T to = t.newInstance();
ReadXML<T,E> xml = new ReadXML<T, E>(e.getClass(), t);
return xml.toBean(e);
}E为传入的对象,T是要返回的对象
我理解的思路是这样:
读入映射配置文件(可以是XML,也可以是数据库)
配置文件记载转换field赋值转换规则
new 目标对象,反射赋值,返回
public <T, E> T convert(E e, Class<T> t) {
T to = t.newInstance();
ReadXML<T,E> xml = new ReadXML<T, E>(e.getClass(), t);
return xml.toBean(e);
}E为传入的对象,T是要返回的对象
解决方案 »
- 文件传输,发送一方怎么先存了一部分数据?
- 大侠帮忙看看10转2进制的代码迷惑~
- 求一个字符串算法
- 关于public void validate()的问题~
- 遇到点小问题:请各位帮忙解决哈!或者是给点意见!!!谢谢!!给高分听取意见!!
- 下载并解包了Ecplise,但就是没有IDE环境,请问如何配置?
- 为了考研,离开这里半年,现在偶又回来了!
- 请问哪位有蓝桥杯决赛的试题
- 求一个用JCREATER编写的JAVA完整(包含所有编译环境中的生成的链接文件)小程序,需要有一定的功能(如:一个写字板程序)即包含若干个对
- Think in Java 电子版书
- eclipse+cdt新建C项目bianry not found
- 线程调用的问题
#左侧是A的属性名称,右侧是B的属性名称,未在配置文件中出现的不做转换
a1=b1
a2=b2
region=area
2、加载配置文件进内存,并映射为Map<String,String>
3、获取A方属性列表,通过配置映射Map判断是否需要进行名称转换。
4、将转换后的属性列表作为B系统的参数请求B系统。
public Map<String,Object> convert(Map<String,Object> mapA,Map<String,Object> mapB);//如果是参数的话这里就是确定的map
}
public class ConvertorImpl implements Convertor{
private Map<String,String> convertParams;
public ConvertorImpl(){
//读取properties中要转换的信息,存到convertParams,如果无需转换的可以存原参数名
}
public Map<String,Object> convert(Map<String,Object> mapA,Map<String,Object> mapB){
for(Map.Entry<String,Object> entry:mapA.entrySet()){
//这里直接把A系统的参数都填入B系统中,需要转换的自然就转换了
mapB.put(convertParams.get(entry.getKey()),entry.getValue());
}
}
}
//一个工厂类负责从properties中获得Convertor的实现实例
public class ConvertorFactory{
public static Convertor newInstance(){
//读取properties中设置的转换器实现类以后如果用不同的实现就可以在properties中设置无需改动代码了
String classPath=properties.getProperty("convertorClass");
Class.forName(classPath).newInstance();
}
}
//properties文件可以这样写
//有多少个就填多少个
a1=b1
a2=b2
//用于设置接口实现类以后可以更换
convertorClass=ConvertorImpl
如果不用这个你怎么能new出Convertor的实现类。有了这个工厂你在使用转换器的时候就可以直接
ConvertorFactory.newInstance().convert(mapA,mapB);在代码上不用再改动了要改动的只是配置文件上的参数对照和如果Convertor实现类不好那就在弄个实现类在properties中的实现类路径替换掉这样硬编码都不用改动。这种模式被想Log4j这样的jar广泛的应用
这个 properties 和 convertorClass 指?
ConvertorImpl convertorImpl = (ConvertorImpl) Class.forName(classPath).newInstance();这个写法如何获取具体在那个包下面?
参数转换模块,我想可能要考虑参数的个数,顺序,类型,并且可能不同的命令转换的方式不同。
如果特别简单,我想可以考虑简单的字符窜替换。
1.设置规则文件。
command1: a1,a2,a3=b1,b2,b3
command2: a1,a2 = b1,b2
2.读入数据,直接replace完成。
3.传入右侧。
按照这样的模块编写,等实际业务规则来了,只要完成规则文件就好了。
顺便说一下,你可以直接定义规则在类中String command1=“command1: a1,a2,a3=b1,b2,b3”;
效果和properties一样。