工厂模型的优势在于减少了工厂与产品之间的耦合,将特定产品的构建过程放在特定的工厂类中。以后扩展产品方便多了。您只需要添加一个工厂类和一个产品类,就可以轻松地添加产品,而无需修改原始代码。在一个简单的工厂中,如果你想添加一个产品,你需要修改工厂类,添加一个if/else分支,或者添加一个case分支。工厂模式符合软件开发中的开闭原则,对扩展开放,对修改封闭。
抽象工厂:总觉得这种模式很像建造者模式。
工厂方法模式为一个产品提供了分层模式,而抽象工厂方法为多个产品提供了分层模式。注意这里的多个具体产品是相互耦合的,也就是说这里的抽象工厂提供的产品之间是有一定联系的。
有些人做如下比较:
工厂方法模式:一个抽象的产品类,从中可以派生出多个具体的产品类。
一个抽象工厂类,从中可以派生出多个具体的工厂类。
对于每个特定的工厂类,只能创建一个特定产品类的实例。
抽象工厂:多个抽象产品类,每个抽象产品类可以派生多个具体产品类。
一个抽象工厂类,从中可以派生出多个具体的工厂类。
每个特定的工厂类可以创建特定产品类的多个实例。
区别:工厂方法模式只有一个抽象产品类,而抽象工厂中有很多。
只能为工厂方法模式的特定工厂类创建特定产品类的一个实例,而可以为抽象工厂创建多个实例。
以下是一个形象比喻:
无论是工厂方法模式、工厂模式还是抽象工厂,它们本质上都是提取不变的部分,将可变的部分留为接口,以最大化重用。以一家生产杯子的工厂为例:起初,没有工厂模型,我必须知道杯子的所有特征,比如杯子的材料和形状,才能生产它们。这是我们新的Cup();这个杯子一定要具体。工厂老板找到了形状相同但材质不同的被子,比如一个是玻璃的,另一个是瓷器的。但是要有两条生产线,显然有浪费资源的嫌疑。现在工厂主生产杯子,不会让生产线知道我要生产玻璃还是瓷器,而是在不知道具体材质的情况下,让它量力而行。当它完成模具时,只需要填充玻璃或陶瓷材料,就可以制作出相同形状的特定杯子。不幸的是,java不能是抽象的Cup,所以有一个工厂方法模式。原来是杯杯=新杯;现在它是简单的工厂。createCup(字符串Cupname),它根据名称产生一个Cup,createCup返回一个实现Cup接口或抽象类的具体cup。简单的抽象工厂有一个问题,就是当我想生产一个形状相同的铁杯时,工厂里没有定义相应的加工流程,只能更改createCup方法,不合理。我现在只想生产铁杯。为什么需要最后一次把玻璃原料换成铁的?所以有工厂模式。本来生产线生产模具的时候也要考虑是玻璃用的模具还是铁杯,现在不用担心了。CupFactory.createCup()创建一个Cup。作为接口或抽象类。实现它的具体子类将创建一个符合Cup接口的具体Cup。所以现在工厂主想生产水壶,就要在工厂模式下重建一条水壶生产线。他能在水杯生产线上同时生产水壶吗?这是抽象工厂。
1.《抽象工厂模式 工厂模式、工厂方法模式和抽象工厂模式的差异简析》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《抽象工厂模式 工厂模式、工厂方法模式和抽象工厂模式的差异简析》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/804403.html