一、工厂模式简介
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、“抽象工厂模式”与“工厂方法模式”的区别:
“工厂方法模式”中的一棵"产品树"与其令一棵“产品树”的产品之间没有联系。
“抽象工厂模式”却有这样的联系,而这种联系就形成了所谓的“产品族”。