java设计模式之三大工厂模式

本文深入解析了工厂模式的三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。详细阐述了每种模式的构成、实例及应用场合,并对比了它们之间的区别。通过具体代码实例,帮助读者理解并掌握工厂模式在软件设计中的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、工厂模式简介

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、“抽象工厂模式”与“工厂方法模式”的区别:

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

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

      



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值