1、工厂方法缺点

  • 仔细理解前面的工厂方法模式,会发现一个问题,就是每一个实例工厂负责生产一个实例产品,也就是一个产品对应一个工厂,一个工厂对应一个产品,那么小米不仅仅生产手机,还生产耳机,智能手环,智能插座等等相关的小米产品簇,不可能给这每一个产品都创建一个工厂类,那样的话代码中的类就太多了,不好维护, 而且也不符合实际情况。

  • 实际上小米或者华为的工厂里面,有相关联的产品簇都是在一个工厂完成创建的;

  • BMW或者Audi汽车制造工厂除了生产汽车,生产线上也有可能生产轮胎,或者其它的汽车附属产品。

所以对于包含产品簇这么一类实体关系的设计,就需要使用Abstract Factory抽象工厂了,你也可以把上面的工厂方法看作只生产一种产品的抽象工厂,本质是相同的。

2、Abstract Factory抽象工厂

经过上面内容的描述,抽象工厂其实就是解决产品簇的产品类设计的,先看看UML类设计图如下:
在这里插入图片描述
看上面抽象工厂的UML类设计图,ProductA和ProductB就是一个产品簇。


系列产品1:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
系列产品2:
在这里插入图片描述
此时创建宝马对象时,因为有产品簇,不可能说又来一个宝马灯工厂,来创建宝马灯,这样的话各种配件,导致工厂类太多了!

将工厂方法写成抽象工厂!


在这里插入图片描述
这样就可以键一组有关联关系的产品放在一个工厂中,提供多个产品创建的抽象接口!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这样可以使得工厂类减少很多!

3、存在的问题

在这里插入图片描述
如果某个汽车做了一项业务,其他汽车都没有,这样就会导致需要在基类AbstractFactory中增加一个抽象方法,这样会导致所有汽车都要重写这个特有的接口(抽象类必须要重写)!

4、简单工厂,工厂方法和抽象工厂对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐