文章目录 LOG:更新日志一、简单工厂模式,工厂方法模式,抽象工厂模式定义二、三种工厂模式的优缺点以及适用场景三、名词解释四、简单工厂模式、工厂方法模式与抽象工厂模式之间的区别五、抽象工厂模式的两种情况:①符合开闭原则;②不符合开闭原则六、三种模式例子java实现代码七、个人简单总结
LOG:更新日志 2019-3-29 第一次完成此文章V1.0.0版本2019-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
简单工厂模式,工厂方法模式以及抽象工厂模式的相图(博主自己理解画的)
工厂方法模式中一个实体工厂类只能创建一种实体产品类;抽象工厂模式中一个实体工厂类可以创建多种实体产品类。
PS:讲人话就是,工厂方法模式:一个工厂一种产品,抽象工厂模式:一个工厂多种产品。
工厂方法模式只有一个抽象产品类,抽象工厂模式有多个抽象产品类。
五、抽象工厂模式的两种情况:①符合开闭原则;②不符合开闭原则又称抽象工厂模式“开闭原则”的倾斜性
①符合开闭原则情况
增加产品族:对于增加新的产品族,抽象工厂模式很好地支持了开闭原则,只需要增加具体产品并对应增加一个新的具体工厂,对已有代码无须做任何修改。
②不符合开闭原则情况
增加新的产品等级结构:对于增加新的产品等级结构 ,需要修改所有的工厂角色,包括抽象工厂类,在所有的工厂类中都需要增加生产新产品的方法,违背了开闭原则。
六、三种模式例子java实现代码java实现简单工厂模式
java实现工厂模式与抽象工厂模式
七、个人简单总结综上所述:
简单工厂模式:只有一个实体工厂类;一个实体工厂类生产所有的产品类,工厂根据传入的参数判断具体生产哪个产品给客户。
工厂方法模式:只有一个抽象产品类;一个实体工厂类生产一种产品类,客户需要知道生产该产品的工厂类名称。
抽象工厂模式:有多个抽象产品类;一个实体工厂类可以生产多种产品类,客户可以从一个工厂获得所有想要的产品。
持续更新中…
未经允许请勿转载,有问题请在评论区评论或者私信!