上次说到简单工厂模式,然后作为简单工厂的扩展,主要是抽象工厂和工厂方法
一般的UML工具图都会提供一些现成的模板,只需要导入就可以了,我用的startUML,来看看例子:
抽象工厂模式:
工厂方法模式:
我第一接触设计模式的时候,第一反应是:天呢!这是什么啊!这些人太无聊了!这有什么用啊?有啥区别呢?
呵呵,不得不承认如果传递知识,过于只言片语确实存在过多的沟通噪音,甚至成了学习者的障碍物。
下面,我对以上两个图做些改动,至少,先区别一下抽象工厂和工厂方法。
用一个比较现实的例子:
抽象工厂:
工厂方法:
上面的例子多少有些不太合理,但为了吸引您的兴趣,就适当采取点变通方式,但道理是一样的。
解读:
对比两幅图
1. 都包含了简单工厂模式
2. 两幅图,都把工厂放在了图的左侧
抽象工厂:Abstractfactory
工厂方法:Ctreaor
3. 产品对应
抽象工厂: 每一个工厂的一个方面可以产出一个类型的产品,如 非本地Fa ,只买房子,不买车是没问题的。(其中注释上税5年,是刚好买车和买房都是5年,不一定要相同条件)
工厂方法: 每个工厂,可以实现多个某种类型的多个产品,如 非本地人Fa, 要安家,是一定要买房,买车,才算安家了。只不过他们划分出你是否纳税5年了还是新来的安家。
4.少许问题
工厂方法中,有点偏差, 不过可以按照级别分。例如:
本地一级:本土
本地二级:仅有户口
非本地一级:5年以上
非本地二级:刚来的
我想表达的意思是,这个层级最好相同,便于调用。
简述两者的应用场景
工厂方法和抽象工厂都是应用级别比较大型的系统中,本身基于简单工厂,所以大多数情况下也是面向客户端和服务端的方式调用。
明天又要面试了。。改天再写两者的具体代码示例,和现实中的例子,以及详细场景应用。