不说啥 贴代码有一个 public class DictateFillerManager {
private static DictateFillerManager dictateManager = new DictateFillerManager();
private DictateFillerManager(){
}

public static DictateFillerManager getInstance(){
return dictateManager;
}

public IConsignFiller createConsignFiller(IDictateConsignVO dictateThreeVO) throws BusinessException, NoCommandException{
IConsignFiller cosignFiller = null;

String agentAccPk = dictateThreeVO.getAgentaccpk();
String agentAcc = dictateThreeVO.getAgentacc();
AccidVO accidVO = getInsideAgentAccType(agentAccPk,agentAcc);
String insideAccTypePk=accidVO.getSub_acctype();

String insideAgentAccType = new ThreeTratorConfigSevice().getInnerConfigAgentAccType(insideAccTypePk,dictateThreeVO.getPk_org(),dictateThreeVO.getAgentacc());

if(insideAgentAccType!=null && !ConsignPayTypeEnum.ConsignPay.value.equals(insideAgentAccType)){
cosignFiller = new ConsignManager().createConsignFiller(dictateThreeVO);
}else if(ConsignPayTypeEnum.ConsignPay.value.equals(insideAgentAccType)){
cosignFiller = new OrdinaryManager().createConsignFiller(accidVO, dictateThreeVO);
}
return cosignFiller;
}
/**
 * 获取内部账户类型
 * 用于委托方式确认
 * @param agentAcc
 * @return
 */
protected AccidVO getInsideAgentAccType(String agentAccPk,String warnInfoNum)throws BusinessException{

}
public class DictateFillerManager {
private static DictateFillerManager dictateManager = new DictateFillerManager();
private DictateCreateLocatorProxy locator;

private ICommonFieldFill commonFieldFill;
private IPayAccField payAccField;
private IReceiveAccField receiveAccField;
private ILinkBankAccField linkBankAccField;
private ICosignAccField cosignAccField;
private IGroupAccInfoField groupAccInfoField;
/**
 * 三方支付 配置信息查询
 */
private ThreeTratorConfigSevice threeTratorConfigSevice;
private DictateFillerManager(){
locator = new DictateCreateLocatorProxy();
threeTratorConfigSevice = new ThreeTratorConfigSevice();

commonFieldFill = new CommonFieldFillImp();
payAccField = new PayAccFieldImpl();
receiveAccField = new ReceiveAccFieldImpl();
linkBankAccField = new LinkBankAccFieldImpl();
cosignAccField = new ConsignFieldImpl();
groupAccInfoField = new GroupFieldImpl();
}

public static DictateFillerManager getInstance(){
return dictateManager;
}

public IConsignFiller createConsignFiller(IDictateConsignVO dictateThreeVO) throws BusinessException, NoCommandException{
IConsignFiller cosignFiller = null;

String agentAccPk = dictateThreeVO.getAgentaccpk();
String agentAcc = dictateThreeVO.getAgentacc();
AccidVO accidVO = getInsideAgentAccType(agentAccPk,agentAcc);
String insideAccTypePk=accidVO.getSub_acctype();

String insideAgentAccType = threeTratorConfigSevice.getInnerConfigAgentAccType(insideAccTypePk,dictateThreeVO.getPk_org(),dictateThreeVO.getAgentacc());
if(ConsignPayTypeEnum.BlowPay.value.equals(insideAgentAccType)){

cosignFiller = new OrdinaryDownPayFiller(commonFieldFill, payAccField, receiveAccField, linkBankAccField, cosignAccField);
}else if(ConsignPayTypeEnum.OrdinaryPay.value.equals(insideAgentAccType)){

cosignFiller = new OrdinaryDownPayFiller(commonFieldFill, payAccField, receiveAccField, linkBankAccField, cosignAccField);
}else if(ConsignPayTypeEnum.NoBankCommand.value.equals(insideAgentAccType)){


}else if(ConsignPayTypeEnum.ConsignPay.value.equals(insideAgentAccType)){

String pkBankAccBas = dictateThreeVO.getPayaccPk();
String pkBankAccType = getBankType(pkBankAccBas,dictateThreeVO.getPayacc());
String  payfunc = threeTratorConfigSevice.getBanktypePayType(pkBankAccType,dictateThreeVO.getPk_org(),dictateThreeVO.getPayacc());
if(PayFuncEnum.AgentsExchangesPay.value.equals(payfunc)){

cosignFiller = new AgentsExchangesPayFiller(commonFieldFill, payAccField, receiveAccField);
}else if(PayFuncEnum.GroupPay.value.equals(payfunc)){

cosignFiller = new GroupPayFiller(commonFieldFill, payAccField, receiveAccField, groupAccInfoField, cosignAccField);
}else if(PayFuncEnum.CallBackPay.value.equals(payfunc)){

}else if(PayFuncEnum.OrdinaryPay.value.equals(payfunc)){

cosignFiller = new ConsignOrdinaryPayFiller(commonFieldFill, payAccField, receiveAccField, linkBankAccField, cosignAccField);
}
}
return cosignFiller;
}

}这2中实现 第一种不是用依赖注入的方式,第二种是直接由工厂来控制下层Filler的构成。及依赖注入的第三种方式,我觉得是第2个好点,但是有人说是第一种好点,求解释。大家可以各抒己见哟Spring依赖注入 控制反转

解决方案 »

  1.   

    看不懂 我只看到了很多ifelse ifelse 第一反应就是耦合度好高。。
      

  2.   

    你这是典型的单例模式,也就是一个class只有一个实例,
    单例模式又分为饥饿模式和懒汉模式,
    饥饿模式是对象在没有使用之前就已经初始化了,jvm一开直接加载到内存中,lz的方式就属于这种。
    懒汉模式是在使用时才把这个对象加载到内存中,
    理论上懒汉模式比饥饿模式节省内存开销。但是必须注意,单例模式模式不是线程安全的,我曾经做过实验,开1000个线程,单例模式可以正常运行,
    超过1000个,就会线程阻塞,卡住了一样,超过5000个,就是一大堆异常了,
    要想做到线程安全,可以在加Synchronized关键字,表示线程同步,一个对象一次只能一个线程访问,
    但这样严重影响了效率。所以说,在访问量少的时候可以使用单例模式,节约内存开销。
    一旦访问量大,并发程度高,切莫使用单例模式。这只是我个人观点,哪位大侠认为这个说法不妥,还请多多指教!