文章目录
LOG:更新日志一、简单工厂模式,工厂方法模式,抽象工厂模式定义二、三种工厂模式的优缺点以及适用场景三、名词解释四、简单工厂模式、工厂方法模式与抽象工厂模式之间的区别五、抽象工厂模式的两种情况:①符合开闭原则;②不符合开闭原则六、三种模式例子java实现代码七、个人简单总结LOG:更新日志
-3-29 第一次完成此文章V1.0.0版本-4-10 更新标题,增加了“java版”字样,文章版本更新至V1.0.1一、简单工厂模式,工厂方法模式,抽象工厂模式定义
PS:简单工厂模式不是GOF 23种设计模式之一!它只是日常编程中一种常用的方法或者说是这是一种习惯。
PS:文中部分看不懂的名词文末都有解释。
二、三种工厂模式的优缺点以及适用场景
简单工厂模式优缺点以及适用场景
优点
实现了对象创建和使用的分离(即业务逻辑和界面逻辑分离)。客户端无需知道所创建的具体产品类的类名,只需知道具体产品类所对应的参数即可。通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。
缺点
工厂类集中了所有产品的逻辑,职责过重,一旦不能工作,整个系统都要受到影响。增加系统中类的个数,增加了系统的复杂度和理解难度。系统扩展困难,一旦添加新产品不得不修改工厂逻辑。由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构,工厂类不能得到很好地扩展。
适用环境
工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。客户端只知道传入工厂类的参数,对于如何创建对象并不关心。
工厂方法模式优缺点以及适用场景
优点
符合开放-关闭原则(简称开-闭原则)将创建对象的逻辑与任务交给了工厂类
缺点
每次新增产品,产品类都需要创建对应工厂类,增加了系统的开销
适用场景
创建某些类的对象的逻辑比较复杂,并且有很多分支条件,而且还可能增加新的条件。一个类不知道它所需要的对象的类 。一个类通过其子类来指定创建哪个对象。需要封装创建类的对象的逻辑,使得这些逻辑局部化。
抽象工厂模式优缺点以及适用场景
优点
隔离了具体类的生成,使得客户端并不需要知道什么被创建。
当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。
增加新的产品族很方便,无须修改已有系统,符合开闭原则。
PS:抽象工厂模式有符合开闭原则的情况,也有不符合开闭原则的情况!!!
PS:抽象工厂模式有符合开闭原则的情况,也有不符合开闭原则的情况!!!
PS:抽象工厂模式有符合开闭原则的情况,也有不符合开闭原则的情况!!!
缺点
增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了开闭原则。
适用场景
一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节。系统中有多于一个的产品族,但每次只使用其中某一产品族。属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来。产品等级结构稳定,设计完成之后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构。
三、名词解释
开放-关闭原则(开闭原则):用抽象构建架构,用实现扩展细节。
PS:讲人话就是不修改源代码。
产品等级结构:产品等级结构即产品的继承结构。
产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品。
下面用一张图描述到底什么是产品族,什么是产品等级结构。这种图叫做相图。
横着的表示不同种类的产品,竖着的表示同一种类产品的不同类型。
例子:
一行表示一部手机的组成:CPU(处理器)、RAM(运行内存)、ROM(机身存储)
一列比如可以表示如下
CPU有:骁龙855、骁龙845、骁龙835
RAM有:4G、8G、16G
ROM有:64G、128G、256G
简单工厂模式,工厂方法模式以及抽象工厂模式的相图(博主自己理解画的)
四、简单工厂模式、工厂方法模式与抽象工厂模式之间的区别
简单工厂模式与工厂方法模式区别:简单工厂模式不符合开闭原则,工厂方法模式符合开闭原则。两个模式中心不同。简单工厂模式的中心是一个实体工厂类,工厂方法模式的中心是抽象工厂类或接口。简单工厂模式中,工厂类包含创建对象的逻辑判断(如:if…else或switch…case);工厂方法 模式中,不必包含创建对象的逻辑判断。工厂方法模式与抽象工厂模式区别:工厂方法模式中一个实体工厂类只能创建一种实体产品类;抽象工厂模式中一个实体工厂类可以创建多种实体产品类。
PS:讲人话就是,工厂方法模式:一个工厂一种产品,抽象工厂模式:一个工厂多种产品。
工厂方法模式只有一个抽象产品类,抽象工厂模式有多个抽象产品类。
五、抽象工厂模式的两种情况:①符合开闭原则;②不符合开闭原则
又称抽象工厂模式“开闭原则”的倾斜性
①符合开闭原则情况
增加产品族:对于增加新的产品族,抽象工厂模式很好地支持了开闭原则,只需要增加具体产品并对应增加一个新的具体工厂,对已有代码无须做任何修改。
②不符合开闭原则情况
增加新的产品等级结构:对于增加新的产品等级结构,需要修改所有的工厂角色,包括抽象工厂类,在所有的工厂类中都需要增加生产新产品的方法,违背了开闭原则。
六、三种模式例子java实现代码
java实现简单工厂模式
java实现工厂模式与抽象工厂模式
七、个人简单总结
综上所述:
简单工厂模式:只有一个实体工厂类;一个实体工厂类生产所有的产品类,工厂根据传入的参数判断具体生产哪个产品给客户。
工厂方法模式:只有一个抽象产品类;一个实体工厂类生产一种产品类,客户需要知道生产该产品的工厂类名称。
抽象工厂模式:有多个抽象产品类;一个实体工厂类可以生产多种产品类,客户可以从一个工厂获得所有想要的产品。
持续更新中…
未经允许请勿转载,有问题请在评论区评论或者私信!