什么是工厂模式?
工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂模式关心的是最终产出(创建)的对象, 而不关心创建的过程。举个例子,好比您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。
为什么要用工厂模式?(优点?) 为什么不直接用new?
平时我们创建对象的时候通常是通过new()的方式,如果我们需要创建对象时做点初始化的工作,比如赋值,我们可能会想到在构造函数中完成,但是有时初始化工作并不是赋值那么简单时,可能会是一段很长的代码,如果写入构造函数中,代码就会显得很难看,而且有悖于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间耦合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。
优点:
(1)给系统带来更大的可扩展性和尽量少的修改量。
(2)一个调用者想创建一个对象,只要知道其名称就可以了。
(3)屏蔽产品的具体实现,调用者只关心产品的接口。
补充:缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
实例化对象的方式?(5种)
(1) new
(2) 通过反射,获得class对象后,我们就可以通过class对象.newInstance()来获得实际对象
详细介绍请查阅 百度经验 -- https://jingyan.baidu.com/article/a948d65116bdf80a2ccd2e67.html
Spring中哪里用到了工厂模式?
Spring中通过BeanFactory、ApplicationContext创建Bean对象时使用到了工厂模式。
除了Spring,哪些场景用到工厂模式?
如果明确了要在不同条件下创建不同实例时就可以使用工厂模式(何时使用?)。
使用场景:
1、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
2、日志记录器:记录可能记录到本地硬盘或者远程服务器等,用户可以选择记录日志到什么地方。
示例
请查阅 菜鸟教程 -- https://www.runoob.com/design-pattern/factory-pattern.html
常见面试题:
(1) 为什么要用工厂模式?(优点?) 为什么不直接用new?
(2) spring中哪里用到了工厂模式?
(3) 除了Spring,那些场景用到了工厂模式?
(4) 实例化对象的方式?