JAVA设计模式之创建型:工厂模式(简单工厂+工厂方法+抽象工厂)

JAVA设计模式


前言

在面向对象编程过程中,创建对象一般采用new操作符来实现,有时new操作符创建对象可能需要一些“过程”来具体实现某些逻辑,这时候工厂模式就比较好的省略这些,直接实现“结果”,获取到调用者需要的对象。

一、工厂模式介绍

工厂模式就是将创建对象的具体过程隐藏,只提供对外创建对象接口。可分为三类:

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式

二、简单工厂模式

1. 定义

是提供一个创建对象的接口,将对象的创建和本身的业务逻辑分离开。
可分工厂类角色,抽象产品角色,具体产品角色
《设计模式》一书中将工厂模式分为两类:工厂方法模式与抽象工厂模式。将简单工厂模式看为工厂方法模式的一种特例,两者归为一类

2.优缺点

提供专门的工厂类创建对象,从而将对象的创建和业务隔离开,只需传入对应的参数即可,实现一定的系统灵活性;
但缺点在不符合“开闭原则”新增产品时需要修改原先的工厂,产品类型较多时,可能会造成工厂逻辑较为复杂,不利于系统维护。

三、工厂方法模式

1.定义

将工厂抽象化,提供一个创建对象的接口,通过具体实现工厂类来创建对应的对象产品,从而也达到“开闭原则”的设计。
可分为:抽象工厂,具体实现工厂,抽象产品,具体产品

2.优缺点

符合“开闭原则”,新增产品只需要增加对应的具体实现工厂,扩展修改也可以通过具体实现工厂来完成,
缺点每增加一个产品,就需要增加具体实现工厂和具体产品类,增加系统复杂和具体产品类的依赖

四、抽象工厂模式

1. 定义

创建相关对象的家族,每个具体实现工厂都可以创建多个产品并封装成一个对象
可分为:抽象工厂,具体实现工厂,抽象产品,具体产品

2.优缺点

通过抽象工厂模式,能够保证客户端只使用同一个产品族中的对象
但该模式的缺点在于添加新的行为时比较麻烦,如果需要添加一个新产品族对象时,需要更改接口及其下所有子类,这必然会带来很大的麻烦。


总结

工厂方法模式与抽象工厂模式的区别在于:

(1)工厂方法只有一个抽象产品类和一个抽象工厂类,但可以派生出多个具体产品类和具体工厂类,每个具体工厂类只能创建一个具体产品类的实例。

(2)抽象工厂模式拥有多个抽象产品类(产品族)和一个抽象工厂类,每个抽象产品类可以派生出多个具体产品类;抽象工厂类也可以派生出多个具体工厂类,同时每个具体工厂类可以创建多个具体产品类的实例

参考链接:Java设计模式之创建型:工厂模式详解(简单工厂+工厂方法+抽象工厂)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值