一、工厂模式简介

1、工厂模式主要作用:为创建对象提供接口。

2、工厂模式的分类:在《java与模式》一书中分为三类,分别是“简单工厂模式(Simple Factory)”,“工厂方法模式(Factory Method)”,“抽象工厂模式(Abstract Factory)”。当然也有其他的分法,在此以上面的三类分法作为本文说明。

3、工厂模式的应用场合:

a、编码时无法预见需要创建哪种类的实例;

b、系统不依赖于产品类的实例来创建、组合和表达细节。

   

二、三种工厂模式的说明

1、简单工厂模式

a、简介:三种工厂模式中最为简单的一个。

b、组成:

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

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

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

c、类图说明:


 

d、实例(具体实现看所附代码):{

ShapeFactory(工厂类)

IShape(抽象产品)
 RectShape、CircleShape(具体产品)
 }

2、工厂方法模式

a、简介:是“简单工厂模式”在“工厂类”这一层级的抽象,即“简单工厂”的工厂。

b、组成:

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

2、具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。

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

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

c、类图说明:


 

d、实例(具体实现看所附代码):{

IShapeFactory(抽象工厂)

CircleFactory、RectFactory(具体工厂,实现抽象工厂)

IShape(一级抽象产品)

Circle、Rect(二级抽象产品,继承一级抽象产品)

WhiteCircle、BlackCircle(具体产品,Circle的实现类)

GreenRect、BlueRect(具体产品,Rect的实现类)


注: CircleFactory的 “产品树”下的产品与 RectFactory的 “产品树”下的产品之间没有联系。

}

3、抽象工厂模式

a、简介:“抽象工厂模式”与“工厂方法模式”表面上看差不多,其实“抽象工厂模式”是“工厂方法模式”的进一步抽象,更具一般性。

b、组成(与“工厂方法模式一样”):

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

2、具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。

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

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

c、类图说明:


 

d、实例(具体实现看所附代码):{

IShapeFactory(抽象工厂)

SmallShapeFactory、LargeShapeFactory(具体工厂,实现抽象工厂)

IShape(一级抽象产品)

IShapeCircle、IShapeRect(二级抽象产品,继承一级抽象产品)

LargeCircle、SmallCircle(具体产品,Circle的实现类)

LargeRect、SmallRect(具体产品,Rect的实现类)

注: SmallShapeFactory “产品树”下的产品与LargeShapeFactory “产品树”下的产品之间有联系,而这种联系就形成了“产品族”。

例如 LargeCircle 与 SmallCircle 同属Circle下的产品,它们两者形成一个“Circle”产品族。

同样, LargeRect 与 SmallRect 也形成一个“Rect”产品族。

}

e、“抽象工厂模式”与“工厂方法模式”的区别:

“工厂方法模式”中的一棵"产品树"与其令一棵“产品树”的产品之间没有联系。

“抽象工厂模式”却有这样的联系,而这种联系就形成了所谓的“产品族”。