java为什么用工厂模式_为什么用简单工厂模式,而不是直接实例化对象

一开始了解了"简单工厂模式"之后,在关于为什么不直接实例对象,而是利用工厂类来实例对象产生了疑惑。

经过多种渠道的了解,我最后的观点是:这个工厂类不仅仅就只能有实例化对象这一个功能。举例来说,如果我要在实例化这个对象之前先读取某些配置,做各种各样的预备工作呢?比如下面的代码:

客户端类:

public classConsoleUser {public static voidmain(String[] args) {//新建运算类

Operation operation;//各种乱七八糟的操作

System.out.println("新建对象a");

System.out.println("新建对象b");

System.out.println("读取配置1");

System.out.println("给对象a赋值");

System.out.println("读取配置2");

System.out.println("给对象b赋值");//创建加法类实例对象,并赋值给运算类

operation = newOperationPlus();

operation.num1= 5;

operation.num2= 2;//打印返回的计算结果

System.out.println(operation.getResult());

}

}

这就是你们说的,不用工厂,而是直接创建对象。假如要多次调用,那岂不是还要把这些繁琐的操作再做一遍?

如果把这些复杂繁琐的操作,提取到工厂的方法中,就会让编码得到很大的简化。

工厂类:

public classOperationFactory {public static Operation createOperation(charoperate) {

Operation operation= null;switch(operate) {case '+':

System.out.println("新建对象a");

System.out.println("新建对象b");

System.out.println("读取配置1");

System.out.println("给对象a赋值");

System.out.println("读取配置2");

System.out.println("给对象b赋值");

operation= newOperationPlus();break;case '-':

operation= newOperationSub();break;case '/':

operation= newOperationDiv();break;case '*':

operation= newOperationMul();break;

}returnoperation;

}

}

客户端类(使用简单工厂方法):

public classConsoleUser {public static voidmain(String[] args) {//新建运算类

Operation operation;//工厂新建加法运算对象

operation = OperationFactory.createOperation('+');

operation.num1= 5;

operation.num2= 2;//对象调用方法返回信息

System.out.println(operation.getResult());

}

}

为了验证我的说法,特地去SessionFactoryImpl这个实现类中找到了opensession这个方法,代码如下:

SessionFactoryImpl中的源码:

privateSessionImpl openSession(

Connection connection,booleanautoClose,longtimestamp,

Interceptor sessionLocalInterceptor

) {return newSessionImpl(

connection,this,

autoClose,

timestamp,

sessionLocalInterceptor== null ?interceptor : sessionLocalInterceptor,

settings.getDefaultEntityMode(),

settings.isFlushBeforeCompletionEnabled(),

settings.isAutoCloseSessionEnabled(),

settings.getConnectionReleaseMode()

);

}

可能有些人会想,为啥不把这些复杂的操作放在加法运算类中。但是这样做,就违背了你一开始想要把具体的运算方法独立出来的初衷,代码耦合了。

比如我有个功能,就只需要加法这个对象而已,那不就尴尬了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值