工厂方法模式与抽象工厂模式的区别是什么

工厂方法模式与抽象工厂模式的区别是什么

【本期文章导读】

工厂方法模式与抽象工厂模式的区别是什么

抽象工厂模式和工厂模式区别

工厂方法模式与抽象工厂模式的区别是什么

而抽象工厂模式有多个:一个抽象产品类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 一个抽象工厂类:工厂方法模式只有一个抽象产品类,可以派生出多个具体产品类。抽象工厂模式:多个抽象产品类。 一个抽象工厂类,每个抽象产品类可以派生出多个具体产品类。 区别工厂方法模式与抽象工厂模式的区别。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例抽象工厂模式和工厂方法模式区别。 每个具体工厂类只能创建一个具体产品类的实例工厂方法模式,而抽象工厂模式可以创建多个,可以派生出多个具体工厂类

1. 这块确实初学者不太好理解,用个例子来简单说明下:

工厂方法模式与抽象工厂模式的区别是什么

举例:一个公司生产枪支,手枪,冲锋枪

开始时,一个厂房里有2条生产线,一条生产线手枪,另一条生产线冲锋枪【简单工厂模式,一个厂房里多条生产线】工厂方法模式与抽象工厂模式的区别

后来要增加一款枪:步枪,怎么办,增加一条生产线吧?

工厂方法模式与抽象工厂模式的区别是什么

厂子里没有多余空间了,只得把原来的生产线空间减小,好腾出地方来添加新的生产线【就好比增加一个新的子类就要改动工厂的内核代码】简单工厂模式和工厂方法模式和抽象工厂

后来又要增加机枪,但是厂子空间太小了,容不下了,怎么办?

2. 厂长发话了,多盖几个工厂,每种枪支一个厂房抽象工厂模式和工厂模式联系;这下好了,4个厂房,4种枪支在有条不紊地生产着【工厂模式】,以后需要再生成什么枪支,增加厂房就是了

后来,步枪和机枪销量不好,手枪和冲锋枪销量比较好,但是买家对口径有要求,另外顺带卖子弹会更卖钱,而且手枪和冲锋枪的子弹是通用的,于是厂长决定:抽象工厂属于什么型模式

停止生产步枪和机枪,枪支产品分为小口径和大口径,分别是5.8mm小口径和7.62mm大口径

枪支生产线:分成两个产品线:A线生产5.8mm手枪和7.62mm手枪,B线生产5.8mm冲锋枪和7.62mm冲锋枪简单工厂模式和工厂方法模式和抽象工厂

子弹生产线: 分成两个产品线:A线生产5.8mm子弹,B线生产7.62mm子弹

厂房:就枪支生产线和子弹生产线的产品进行组合验收,

3. A厂房:5.8mm手枪和5.8mm子弹验收B厂房:7.62mm手枪和7.62mm子弹验收C厂房:5.8mm冲锋枪和5.8mm子弹验收 D厂房:7.62mm冲锋枪和7.62mm子弹验收工厂方法模式与抽象工厂模式的区别和联系

买家买货时,直接去厂房就可以了,4个厂房随它选

后来对特大口径有需求,9mm口径,这个容易,枪支生产线和子弹生产线各增加一条生产线,再盖几个验收厂房就是了工厂方法模式与抽象工厂模式的区别和联系

这就是抽象工厂模式,可以多维度生产产品,在厂房内自由组合

工厂方法像是工厂内的一种产品生产线;调用一次只能生产一种产品。

抽象工厂模式就像拥有多个产品线的不同工厂;调用一次能生产多种产品。

抽象工厂模式和工厂模式区别

工厂模式、简单工厂模式、抽象工厂模式三者的区别:

1、创建对象不同工厂方法模式与抽象工厂模式的区别和联系。创建对象时,“工厂模式”使用Factory模式替代使用new创建对象;“简单工厂模式”使用fw模式建立对象;“抽象工厂模式”则使用迭代模式创建对象。

2、定义变量不同。“工厂模式”不用事先定义变量,使用时随时引用便可。“简单工厂模式”,使用参数或者配置文件等事先定义好的变量,然后利用分支判断初始化具体产品类并返回抽象工厂属于什么型模式。“抽象工厂模式则”不符合“开发-封闭”原则,每次增加产品,都需要修改类方法。

3、接口数量不同。“工厂模式”有两至三个接口。“简单工厂模式”只有一个接口工厂方法模式与抽象工厂模式的区别。抽象工厂模式理论上具有无限个接口。

扩展资料

编程使用“工厂模式”的优缺点:

1、优点:

方便扩展算法,比如增加一个开根号的功能,我们只要继续继承运算类就行了,同时客户端也就是使用者不知道具体的实现细节,只要给出相关标示符,工厂函数就马上给他创建一个他想要的实体就行了。减少了使用者和功能开发者之间的耦合度抽象工厂属于什么型模式。

2、缺点:

在进行扩展的时候,我们要更改工厂函数里面的那个分支语句Switch,这样便破坏了OCP,而且当有多级结构继承的时候,简单工厂就会因为只能对应平行一层记得继承,不得不使得好多类继承同一个接口,然后得到A*B这么多的工厂实体可能,工厂函数很难维护抽象工厂模式和工厂方法模式区别。

工厂模式,简单工厂模式,抽象工厂模式三者区别如下:

1、首先,三者的创建对象是不相同的。

进行创建对象时,“工厂模式”不使用new创建对象,而是使用Factory模式;“简单工厂模式”则是通过fw模式来建立对象;“抽象工厂模式”使用迭代模式来创建对象什么是抽象工厂模式。

2、其次,三者的定义变量不同。

“工厂模式”在使用时可以随时设置变量,不用提前进行设置。“简单工厂模式”中需要使用参数或者配置文件等已经定义好的变量,然后才能进行下一步的操作抽象工厂模式和工厂方法模式。“抽象工厂模式则”则需要每次增加产品时,进行修改类方法。

3、最后,三者的接口数量不同。“工厂模式”可以使用两个接口以及三个接口,“简单工厂模式”只可以使用一个接口。“抽象工厂模式”则可以使用无限个接口抽象工厂模式和工厂方法模式。

扩展资料:

简单工厂模式优缺点

1、优点:工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品抽象工厂属于什么型模式。简单工厂模式通过这种做法实现了对责任的分割。

当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响抽象工厂模式和工厂模式联系。

2、缺点:系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂,违背了"开放--封闭"原则(OCP)。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构简单工厂模式和工厂方法模式和抽象工厂。

参考资料来源:百度百科-工厂模式

工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面。在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的代码。而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加if/else分支,或者增加一个case分支,工厂模式符合软件开发中的OCP原则(open close ),对扩展开放,对修改关闭抽象工厂模式和工厂模式联系。

抽象工厂模式:这个模式我总是感觉和builder模式非常相似。

工厂方法模式提供的是对一个产品的等级模式,,而抽象工厂方法提供的是对多个产品的等级模式,注意,这里的多个具体产品之间是相互耦合的,也就是说这里的抽象工厂提供的产品之间是存在某种联系的工厂方法模式与抽象工厂模式的区别和联系。

有人做如下的比较:

工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类可以创建多个具体产品类的实例。

区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

下面是一个形象的比喻:

无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。拿一个生产水杯(cup)的工厂举例:起初,不用工厂模式,我必须在生产水杯之前知道水杯的材料和形状等水杯的所有特征才能生产,这就是我们的new Cup();这个Cup必须是具体的。厂主发现同一形状的被子,只是材料不同,如一个是玻璃(glass)的,一个是瓷(china)的,但是确要两条生产线,显然有资源浪费的嫌疑。现在厂主生产杯子时先不让生产线知道我要产的是玻璃的还是瓷的,而是让它在不知道具体材料的情况下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形状的具体杯子了。但是很可惜,java并不能new一个抽象的Cup,所以就有了简单工厂模式。原来是Cup cup=new Cup;现在是.(String cupName),根据cup的名字生产Cup,而返回的是一个实现了 Cup接口或抽象类的具体Cup。简单抽象工厂模式有一个问题,就是当我现在想生产一个同样形状的铁杯时,工厂里并没有定义相应的处理流程,只能更改方法,这就不合理了。我现在只是想生产铁杯,你只要在最后的时候把玻璃原料换成铁的不就行了吗,干嘛还要更改整条生产线呢?于是就有了工厂模式。原来生产线在生产模具的时候还要考虑是为玻璃杯生产的模具还是为铁杯生产的模具,现在它不用管了。.()创建Cup.是接口或抽象类抽象工厂模式和工厂模式联系。实现它的具体子类会创建符合Cup接口的具体Cup工厂模式 抽象工厂。那么现在厂主想要生产水壶(kettle),用工厂模式就不得不再造一条水壶生产线,能不能在水杯生产线同时生产水壶呢?这就是抽象工厂模式工厂方法模式与抽象工厂模式的区别和联系工厂模式 抽象工厂。

工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面。在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的代码。而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加if/else分支,或者增加一个case分支,工厂模式符合软件开发中的OCP原则(open close ),对扩展开放,对修改关闭。

抽象工厂模式:这个模式我总是感觉和builder模式非常相似。

工厂方法模式提供的是对一个产品的等级模式,,而抽象工厂方法提供的是对多个产品的等级模式,注意,这里的多个具体产品之间是相互耦合的,也就是说这里的抽象工厂提供的产品之间是存在某种联系的。

有人做如下的比较:

工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类可以创建多个具体产品类的实例。

区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

下面是一个形象的比喻:

无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。拿一个生产水杯(cup)的工厂举例:起初,不用工厂模式,我必须在生产水杯之前知道水杯的材料和形状等水杯的所有特征才能生产,这就是我们的new Cup();这个Cup必须是具体的。厂主发现同一形状的被子,只是材料不同,如一个是玻璃(glass)的,一个是瓷(china)的,但是确要两条生产线,显然有资源浪费的嫌疑。现在厂主生产杯子时先不让生产线知道我要产的是玻璃的还是瓷的,而是让它在不知道具体材料的情况下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形状的具体杯子了。但是很可惜,java并不能new一个抽象的Cup,所以就有了简单工厂模式。原来是Cup cup=new Cup;现在是.(String cupName),根据cup的名字生产Cup,而返回的是一个实现了 Cup接口或抽象类的具体Cup。简单抽象工厂模式有一个问题,就是当我现在想生产一个同样形状的铁杯时,工厂里并没有定义相应的处理流程,只能更改方法,这就不合理了。我现在只是想生产铁杯,你只要在最后的时候把玻璃原料换成铁的不就行了吗,干嘛还要更改整条生产线呢?于是就有了工厂模式。原来生产线在生产模具的时候还要考虑是为玻璃杯生产的模具还是为铁杯生产的模具,现在它不用管了。.()创建Cup.是接口或抽象类。实现它的具体子类会创建符合Cup接口的具体Cup。那么现在厂主想要生产水壶(kettle),用工厂模式就不得不再造一条水壶生产线,能不能在水杯生产线同时生产水壶呢?这就是抽象工厂模式。

以上详细为您解答了关于工厂方法模式与抽象工厂模式的区别是什么以及与之相关的一些内容。相信看完以上的内容,大家对于工厂方法模式与抽象工厂模式的区别是什么这个问题也有了一定的了解。如果大家还有什么不明白的地方,可以在下方评论区留言,我们会在第一时间为大家答疑解惑。

本站所有内容均来自互联网,文章内容仅供娱乐,请勿盲目轻信迷信。文章版权归源网站或源作者所有,如果有侵犯请联系我们删除。
11层高层买几层比较好
« 上一篇 星晖运势网
开光的镜子放什么地方
下一篇 » 星晖运势网