为什么用简单工厂模式,而不是直接实例化对象
2019-03-13 23:34:03来源:博客园 阅读 ()
一开始了解了"简单工厂模式"之后,在关于为什么不直接实例对象,而是利用工厂类来实例对象产生了疑惑。
经过多种渠道的了解,我最后的观点是:这个工厂类不仅仅就只能有实例化对象这一个功能。举例来说,如果我要在实例化这个对象之前先读取某些配置,做各种各样的预备工作呢?比如下面的代码:
客户端类:
public class ConsoleUser { public static void main(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 = new OperationPlus(); operation.num1 = 5; operation.num2 = 2; //打印返回的计算结果 System.out.println(operation.getResult()); } }
这就是你们说的,不用工厂,而是直接创建对象。假如要多次调用,那岂不是还要把这些繁琐的操作再做一遍?
如果把这些复杂繁琐的操作,提取到工厂的方法中,就会让编码得到很大的简化。
工厂类:
public class OperationFactory { public static Operation createOperation(char operate) { 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 = new OperationPlus(); break; case '-': operation = new OperationSub(); break; case '/': operation = new OperationDiv(); break; case '*': operation = new OperationMul(); break; } return operation; } }
客户端类(使用简单工厂方法):
public class ConsoleUser { public static void main(String[] args) { //新建运算类 Operation operation; //工厂新建加法运算对象 operation = OperationFactory.createOperation('+'); operation.num1 = 5; operation.num2 = 2; //对象调用方法返回信息 System.out.println(operation.getResult()); } }
为了验证我的说法,特地去SessionFactoryImpl这个实现类中找到了opensession这个方法,代码如下:
SessionFactoryImpl中的源码:
private SessionImpl openSession( Connection connection, boolean autoClose, long timestamp, Interceptor sessionLocalInterceptor ) { return new SessionImpl( connection, this, autoClose, timestamp, sessionLocalInterceptor == null ? interceptor : sessionLocalInterceptor, settings.getDefaultEntityMode(), settings.isFlushBeforeCompletionEnabled(), settings.isAutoCloseSessionEnabled(), settings.getConnectionReleaseMode() ); }
可能有些人会想,为啥不把这些复杂的操作放在加法运算类中。但是这样做,就违背了你一开始想要把具体的运算方法独立出来的初衷,代码耦合了。
比如我有个功能,就只需要加法这个对象而已,那不就尴尬了。
原文链接:https://www.cnblogs.com/TigerAustin/p/10524352.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 如何干掉 if else 策略+工厂 2020-06-11
- Linux简单命令的学习 2020-06-10
- 因为命名被diss无数次。简单聊聊编程最头疼的事情之一:命名 2020-06-10
- 为什么阿里巴巴Java开发手册中不允许魔法值出现在代码中? 2020-06-09
- 计算机基础到底是哪些基础?为什么很重要! 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash