拉百度报表业务,是拉取各渠道业务之中的一个. 一大亮点是我们设计成了工厂模式,通过将所有的实现类@Autowired进入spring,然后再塞进map里,获取的时候通过渠道的tag取出对应的实现类.
@Qualifier("gdtMediaVendorBizManager")
@Autowired()
public void setGdtDeliveryReportDataManager(MediaVendorBizManager mediaVendorBizManager) {
putMap(mediaVendorBizManager);
}
/**
* put managerMap
*
* @param mediaVendorBizManager
*/
private void putMap(MediaVendorBizManager mediaVendorBizManager) {
MANAGER_MAP.put(mediaVendorBizManager.withBusinessTagEnum().getTag(), mediaVendorBizManager);
}
第二大亮点是, 百度报表分为搜索引擎和信息流,他俩的方法很相像,有不同的地方基本上是参数的不同.
这俩实现类可以抽取出公共方法,我之前想的是写一个 Component类,这里面写公共方法,
然后那俩实现类Autowired那个 Component类.这样做,不太好,因为凭空多出了一个Component类.
康x提出,说建一个抽象类,这个抽象类 implements 那个顶层接口.然后那俩原先的实现类继承这个抽象类.
然后在抽象类里,实现拉取报表方法,然后将那俩实现类不同的地方, 封装成抽象方法,在拉取报表那个接口方法中,调用抽象方法, 抽象方法就由那俩实现类来实现.
这样,那俩实现类根本不用实现拉取报表方法, 只由抽象类实现就好了,他俩只需要实现不同的参数封装方法.真正做到了代码解耦,和代码复用.