原文地址 : 抽象工厂模式
抽象工厂模式算是工厂相关模式的终极形态
[blockquote]
定义: 为创建一组相关或相互依赖的对象提供一个接口, 而且无需指定他们的具体类
[/blockquote]
跟工厂模式的区别就是 工厂也有个接口规范
在jdk的源码中就有一个不太明显的抽象工厂模式:
[blockquote]
- 那就是List接口, 它在iterable的基础上, 扩展一个创建产品的方法
- 其中的iterator() 与listIterator() 尽管后者是前者的子类 但是两者的功能是不一样的
- Iterator是只能向后移动的迭代器
- ListIerator是能够前后移动的迭代器
- 所以说两者应该是不同的产品
[/blockquote]
这张图很能表现他们之间关系
在这我只能说这张图真好
[blockquote]
- List 抽象工厂的角色, 有两个产品iterator 和 listIterator, 建议看下源码 一看配合这张图一看就懂, 这两个迭代器的具体实现是内部的
- iterator 和 listIteratot相当于两个产品的规范(抽象产品), 这路忽略listiterator的继承与iterator, 其中iterator的实现是abstractlist.itr, listIterator的实现有两个分别有两个实现, 忽略其中的abs.itr和abs.listitr的关系
- 这幅图的关系中我们大致可以这么描述: 抽象工厂List
- 工厂实现 LinkedList ArrayList
- 产品规范 Iterator ListIterator
- 具体的产品 AbstractList.Itr (看图产品不一定是对称的),LinkedList.Itr, LinkedList.ListIter
[/blockquote]
总结:
[blockquote]
- 简单工厂, 工厂无抽象 简单工厂违背了开闭原则
- 工厂模式, 抽象工厂, 抽象产品, 但是只能创建一个系列的产品
- 抽象工厂模式, 可以拥有多产品线
[/blockquote]
尽管看上去工厂模式比较简单, 但是大都数人开发的时候并没有想过这个问题, 我是没想过, 好了抓紧吧