Java面试经验第一季之设计模式——工厂模式

说到工厂模式,可能很多人都觉得挺简单的,就是一个工厂类生产具体的产品对象,每个对象执行同一个行为。其实这种想法没错,只是这种说法只是最简单的一种工厂模式,就是俗称的简单工厂模式,其实工厂模式还有很多可供挖掘的东西,接下来我就详细的说说工厂模式。

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

在《Java与模式》一书中,把工厂分为三类:

1)简单工厂模式(Simple Factory):不利于产生系列产品;

2)工厂方法模式(Factory Method):又称为多形性工厂;

3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品;

这三种模式从上到下逐步抽象,并且更具一般性。如果我只是按照书面这么去表达可能你看过之后,现在暂时能记住,可能过两天或者面试的时候一紧张,估计就什么都忘了,下面我用通俗的例子来讲解一下。

简单工厂模式,就像你只有一个加工厂,这个工厂能够生产两种不同类型的产品(钢笔和铅笔,这两种笔都可以写字,只是写字这种行为不同而已),工厂有两条生产线,一条生产钢笔,一条生产铅笔。所以当你接到钢笔的订单时,你就生产钢笔,否则生产铅笔。此时你就只是一个小老板,随时可能面临倒闭。

工厂方法模式,就像你有两个加工厂,一家生产钢笔,一家生产铅笔,每家工厂有几条生产线就无所谓了。所以当你接到钢笔的订单时,你就去找钢笔的加工厂生产就行,否则铅笔加工厂。此时你有一定的抗风险能力了,算是一个中型的老板了。

抽象工厂模式,就相当于你是一个产品供应商(Provider),认识两家加工厂老板,每家加工厂都能生产钢笔和铅笔,只不过生产的钢笔和铅笔,品牌不一样。所以当你接到订单时,直接去找加工厂老板就行了。此时已经形成了供应商渠道了,你也走上了人生巅峰。

下面详细说一下

扫描二维码关注公众号,回复: 5306034 查看本文章

简单工厂模式

它的组成:

1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化。

Java面试经验第一季之设计模式——工厂模式

简单工厂模式

工厂方法模式

它的组成:

1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给抽象工厂的子类去做。

Java面试经验第一季之设计模式——工厂模式

工厂方法模式

抽象工厂模式

抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象产品 (AbstractProduct) 可能是一个或多个,从而构成一个或多个产品族(Product Family)。 在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。

Java面试经验第一季之设计模式——工厂模式

抽象工厂模式

总结

  1. 简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。 (加工厂老板)

  2. 工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。(多家加工厂企业主)

  3. 抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构。(供应商)

欢迎大家指出不足之处,希望大家多多关注,你的关注就是我的动力。

猜你喜欢

转载自blog.csdn.net/qq_41552245/article/details/87867332