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