1:其中接口 AdapterConfig内的方法,有抽象类 AbstractService及其实现类,共同完成重写(可以重复,但要完整.)
所以抽象类 AbstractService中没有重写的方法要在其实现类中重写.
实现类中没有重写的方法,要在抽象类中重写.
具体看需求,一般来讲 通用的写在抽象类中,特殊的写在实现类中.
2:这里AdapterConfig正常来讲,应该是BaseService,AbstractService应该是BaseServiceImpl.
因为用到适配器模式,所以这里的接口BaseService就换成了 AdapterConfig.该接口内提供了获取具体实现增删改查,批量,及其他的方法以及
获取SiebelAdaper类对象的方法.
具体看第三方适配器包:
com.xxxxx.crm.thirdparty.adapter --相当于另一套规范
1:接口 Adapter.java
–适配器接口
—方法太多了,我就不写了增删改查,批量,invokeBs,MVG,pickList
AdapterConfig.java
–适配器装配置接口
2:类 AdapterFactory.java
–适配器选择工厂类(可以根据不同的工厂生产不同的适配器。
具体选择,在配置文件内:adapter.classname 可以有其他值)
SiebelAdapter.java
– 适配器实现类,具体干事的类。
//这里基服务类 实现了适配器配置类,要获得对应的适配器.
public abstract class **AbstractBase**<Z extends BaseModel> implements **AdapterConfig**<Z>{
public static final Logger logger = LoggerFactory.getLogger(AbstractBase.class);
//1:获得适配器
public final Adapter<Z> adapter = (Adapter<Z>) AdapterFactory.getAdapter();
public Adapter<Z> getAdapter() throws Exception{
if(adapter == null ){ throw new Exception("未提供连接远程数据服务器的适配器"); }
if(adapter.getConfig() == null){ adapter.setConfig(this);}
return adapter;
}
//2;方法执行耗时计算
private String timerCount(long timer){
timer = System.currentTimeMills() - timer ;
return "Siebel 运行耗费 = [" +timer+"ms]";
}
//列表相关
//3.通过model查询,取得数据的列表
public List<Z> getList(Z model) throws Exception{
try{
long timer = System.currentTimeMillis();//方法执行前时间.
List<Z> retObj = getAdapter().getList(model);
logger.info( timerCount(timer) );
return retObj;
}catch(Exception e){
logger.error( e.getMessage());
throw e;
}
}
//:通过BS查询,取得数据的列表
public List<Z> getListByBS(Z model) throws Exception{
try{
long timer = System.currentTimeMillis();//方法执行前时间.
List<Z> retObj = getAdapter()