上次说到简单工厂模式,然后作为简单工厂的扩展,主要是抽象工厂工厂方法

一般的UML工具图都会提供一些现成的模板,只需要导入就可以了,我用的startUML,来看看例子:

抽象工厂模式: 

我是架构师-设计模式-工厂模式--抽象工厂和工厂方法区别_第1张图片

工厂方法模式:

我是架构师-设计模式-工厂模式--抽象工厂和工厂方法区别_第2张图片

 

我第一接触设计模式的时候,第一反应是:天呢!这是什么啊!这些人太无聊了!这有什么用啊?有啥区别呢? 

呵呵,不得不承认如果传递知识,过于只言片语确实存在过多的沟通噪音,甚至成了学习者的障碍物。 

下面,我对以上两个图做些改动,至少,先区别一下抽象工厂工厂方法。

用一个比较现实的例子:

抽象工厂:

 

 

我是架构师-设计模式-工厂模式--抽象工厂和工厂方法区别_第3张图片

 工厂方法: 

我是架构师-设计模式-工厂模式--抽象工厂和工厂方法区别_第4张图片

 上面的例子多少有些不太合理,但为了吸引您的兴趣,就适当采取点变通方式,但道理是一样的。

解读:

对比两幅图

1. 都包含了简单工厂模式

2. 两幅图,都把工厂放在了图的左侧

抽象工厂:Abstractfactory

工厂方法:Ctreaor

3. 产品对应

抽象工厂: 每一个工厂的一个方面可以产出一个类型的产品,如 非本地Fa ,只买房子,不买车是没问题的。(其中注释上税5年,是刚好买车和买房都是5年,不一定要相同条件)

工厂方法: 每个工厂,可以实现多个某种类型的多个产品,如 非本地人Fa, 要安家,是一定要买房,买车,才算安家了。只不过他们划分出你是否纳税5年了还是新来的安家。

4.少许问题

工厂方法中,有点偏差, 不过可以按照级别分。例如:

本地一级:本土

本地二级:仅有户口

非本地一级:5年以上

非本地二级:刚来的

我想表达的意思是,这个层级最好相同,便于调用。 

简述两者的应用场景

工厂方法和抽象工厂都是应用级别比较大型的系统中,本身基于简单工厂,所以大多数情况下也是面向客户端和服务端的方式调用。 

明天又要面试了。。改天再写两者的具体代码示例,和现实中的例子,以及详细场景应用。