简单工厂模式、工厂方法模式和抽象工厂模式有何区别?
一、简单工厂模式、工厂方法模式和抽象工厂模式的区别
简单工厂模式
简单工模式时类的创建模式,又叫做静态工厂方法(static Factory Method)。简单工厂模式是一个工厂对象决定创建出哪一种产品类的实例。它存在的目的很简单:定义一个创建对象的接口。
组成:
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
工厂方法模式
是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给抽象工厂的子类去做。
来看下它的组成:
抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
抽象工厂模式
在抽象工厂模式中,抽象产品 (AbstractProduct) 可能是一个或多个,从而构成一个或多个产品族(Product Family)。 在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。
工厂方法模式 VS 抽象工厂模式
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品的实例。
区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
延伸阅读:
二、抽象工厂优缺点
抽象工厂的优点:抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。
抽象工厂的缺点:产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。
以上就是关于简单工厂模式、工厂方法模式和抽象工厂模式有何区别的内容希望对大家有帮助。

猜你喜欢LIKE
相关推荐HOT
更多>>
Concurrent Programming, Parallel Programming 的本质区别是什么?
一、Concurrent Programming, Parallel Programming 的本质区别略有交叉,各有不同。Parallel Programming强调如何在多于1个CPU等情况下对系详情>>
2023-10-13 23:11:46
简单工厂模式、工厂方法模式和抽象工厂模式有何区别?
一、简单工厂模式、工厂方法模式和抽象工厂模式的区别简单工厂模式简单工模式时类的创建模式,又叫做静态工厂方法(static Factory Method)。...详情>>
2023-10-13 21:42:32
聚类和降维有什么区别与联系?
一、聚类和降维的区别与联系区别降维就是复杂的高维数据信息简化为更容易阅读的低维数据信息,就像素描把三维的立体图形绘制在二维的平面上,而...详情>>
2023-10-13 20:26:02
OC中协议和多态有什么区别?
一、OC中协议和多态的区别在Objective-C中,协议(Protocol)和多态(Polymorphism)是两个不同的概念,它们的区别如下:协议(Protocol):协...详情>>
2023-10-13 20:01:13热门推荐
大家都在用的Mpp数据库有哪些?
沸Concurrent Programming, Parallel Programming 的本质区别是什么?
热lua编译器和lua解释器有什么区别?
热怎么自定义Visual Studio代码折叠识别的区域?
新4核4线程和4核8线程区别?
简单工厂模式、工厂方法模式和抽象工厂模式有何区别?
Spark 和 Hadoop 有什么区别?
cs和bs区别?
axios和ajax区别?
ar模型和ma模型的区别?
聚类和降维有什么区别与联系?
DOF和HP有什么区别?
OC中协议和多态有什么区别?
SAS 9.0中,class指令跟by指令有哪些区别?
技术干货






