设计模式--抽象工厂模式

介绍

实际上,关于工厂模式可能会遇到三种名称,分别是简单工厂模式,工厂模式,抽象工厂模式。
严格的意义上来讲,简单工厂模式并不属于设计模式之一。
这里想主要探讨一下抽象工厂模式是怎样实现的,以及抽象工厂模式的特点,如何去理解等等。
接下来将先去说一下代码,然后再去思考抽象工厂的特性,要不然上来说特性就可太生草了。。
以下案例参考了知乎网友提供的图

关系图

代码实现

抽象工厂


首先应当定义一个高度抽象的工厂接口,这个接口告诉我们:一个电脑工厂应当具备生产鼠标和键盘的功能
多插嘴一句:如何理解抽象?我认为抽象就是去总结一类相似物体的共同特性,比如电脑厂商就是要生产鼠标和键盘,鼠标就是可以click,键盘就是可以knock

抽象鼠标/键盘


上面也说了,鼠标就是可以click,键盘就是可以knock。
至此,我已经把所有的实体对象的抽象标准制定了,接下来就开始创建实体工厂去生产真正的鼠标,毕竟抽象的鼠标又不能click。。。

实体鼠标/键盘


这里有点难以理解了,有人会疑惑为啥要创建两个实体的鼠标,而且是戴尔和惠普鼠标。
因为这篇文章在讲抽象工厂嘛,既然是抽象的工厂,那肯定会存在多个实体的工厂才对(比如接下来我要定义的Dell工厂和Hp工厂),那这两个工厂肯定会去制造不同品牌的鼠标,所以在这里就需要先把这些品牌的鼠标给定义了,注意!!实体鼠标和实体键盘只不过是对他们进行定义而已,我们还没有到new的阶段呢。

实体工厂


看到了吗,这俩实体工厂都是继承(实现)自我们的抽象工厂的,然后这两个工厂都能够制造自己的鼠标和键盘

客户端调用


这里直接看注释吧,很好理解。

抽象工厂特性分析

什么是抽象工厂?抽象工厂就是我们对某一堆工厂(戴尔工厂,华硕工厂,惠普工厂,苹果工厂...)的高度抽象,具备所有实体工厂的通用特点。通过此抽象工厂我们可以自己实现各式各样的实体工厂,并且在这些实体工厂中去创建对应的鼠标和键盘。
再去观察一下工厂模式,工厂模式中并不存在有关抽象工厂的声明,如果我们想去新增产品,需要更改原有工厂的内部代码,但是抽象工厂中就需要新增一个实体工厂和该实体工厂制造的商品定义,不需要对其他实体工厂进行变动。

posted @ 2022-03-08 23:41  mirage_mc  阅读(45)  评论(0编辑  收藏  举报