工厂模式

Posted liaowenhui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式相关的知识,希望对你有一定的参考价值。

什么是工厂模式?

工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂模式关心的是最终产出(创建)的对象, 而不关心创建的过程。举个例子,好比您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。

为什么要用工厂模式?(优点?) 为什么不直接用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) 实例化对象的方式?

 

以上是关于工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

工厂模式抽象工厂模式策略模式

JAVA设计模式——工厂模式简单工厂模式工厂方法模式抽象工厂模式

C++实现工厂模式(简单工厂模式工厂方法模式抽象工厂模式)

设计模式之工厂模式详解和应用

iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

设计模式——抽象工厂模式