介绍


我看了廖雪峰和菜鸟教程上对于这个模式的实现,存在一定的差别。在文末我会放出链接,并做一张简图进行对比,以及解释我的理解

我认为抽象工厂与工厂模式最大的差别,应该在于其面向的对象是有差别的。工厂模式面对的是同一类产品,比如裤子,可以生产各种各样的裤子;而抽象工厂模式面对的是多类产品组成的一个产品族

等等,好像我的理解出现了偏差

使用场景

实现


概述

代码

个人想法以及两篇文章的对比


文章对比

文章链接

廖雪峰的文章
菜鸟教程

简图对比(自带的作图并不是很好用…)

菜鸟教程

廖雪峰

阐述

简单地阐述一下。

菜鸟教程的

抽象工厂模式实现的是,抽象工厂是对各个工厂的一个抽象,提取工厂的公共部分,形成统一的接口以生成具体工厂。(不过参照菜鸟教程的文本,似乎也是在描述廖雪峰所实现的这样一个模型,不知道为什么实现的却是另外的模样)

在main函数中,可以看到,它调用整个系统的过程是

  1. 生成shape具体工厂
  2. 生成shape对象
  3. 生成Color具体工厂
  4. 生成Color对象

通过以上四个步骤,可以生成一个完整的shape+color产品。当然,以上操作完全可以进行封装以后再

廖雪峰的

教程认为,抽象工厂是对最终的复合产品(或者说 产品族)的一个抽象,

我的想法

关于这个设计模式,我有一些简单的思考

最初我对这个模式的期望是

  • 抽象工厂提供整体的接口(或者抽象类之流,一个意思)
  • 大型工厂extends抽象工厂接口,通过调用各个小型工厂生产部件,负责生产完整的、成套的产品
  • 小型工厂负责生产各个部件

我会想,小型工厂和大型工厂是聚合关系(应该是聚合吧…),需要什么部件则将相应的小型工厂添加至大型工厂,也就是说,抽象工厂模式主要的抽象部分是在大型工厂这一块,小型工厂就是按照工厂模式实现即可

在看了菜鸟教程之后,发现和我对于该模式的期望不太一样,于是又查阅了一下廖雪峰的文章,有所收获