你的需求是典型的适配器模式,业务比较简单,需要重复定义多个是配置,一类功能定义一个比较合适
我理解的思路是这样:
读入映射配置文件(可以是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是要返回的对象

解决方案 »

  1.   

    1、建立属性映射配置文件用properties文件即可。文件格式可以如下:
    #左侧是A的属性名称,右侧是B的属性名称,未在配置文件中出现的不做转换
    a1=b1
    a2=b2
    region=area
    2、加载配置文件进内存,并映射为Map<String,String>
    3、获取A方属性列表,通过配置映射Map判断是否需要进行名称转换。
    4、将转换后的属性列表作为B系统的参数请求B系统。
      

  2.   

    楼主这个需求不像适配器更像是转换器,典型的适配器是像slf4j-api和log4j以及jdk中的Reader与inputStream这样的。他们都是实现目标接口持有原接口,楼主这种的并不是这样的,更倾向于转换器。可以定义一个统一的Convertor接口,接口中的convert方法由实现类去做。实现类以及要转换的参数对照都可以由properties文件中读取。ConvertorFactory去newInstance这里面就是读取properties中设置的convertor实现。public interface Convertor{
      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
      

  3.   

    不是很明白  ConvertorFactory 的作用!
      

  4.   

    ConvertorFactory是负责产生Convertor的实例的因为你Convertor是一个接口而且Convertor的实现类是不定的我们为了提高维护和拓展性让其实现类可以在properties文件中设置实现类的类路径
    如果不用这个你怎么能new出Convertor的实现类。有了这个工厂你在使用转换器的时候就可以直接
    ConvertorFactory.newInstance().convert(mapA,mapB);在代码上不用再改动了要改动的只是配置文件上的参数对照和如果Convertor实现类不好那就在弄个实现类在properties中的实现类路径替换掉这样硬编码都不用改动。这种模式被想Log4j这样的jar广泛的应用
      

  5.   

    properties.getProperty("convertorClass");
    这个 properties 和 convertorClass 指?
      

  6.   

    properties当然是指load进来的properties我代码只是描述出思路,convertorClass当然是指你转换器的实现类。
      

  7.   

    String classPath = SystemConfigUtil.getInstance().getProps().getProperty("convertorClass");
    ConvertorImpl convertorImpl = (ConvertorImpl) Class.forName(classPath).newInstance();这个写法如何获取具体在那个包下面?
      

  8.   

    Hi,
    参数转换模块,我想可能要考虑参数的个数,顺序,类型,并且可能不同的命令转换的方式不同。
    如果特别简单,我想可以考虑简单的字符窜替换。
    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一样。