设计模式之抽象工厂模式读后(六)

原文地址 : 抽象工厂模式

抽象工厂模式算是工厂相关模式的终极形态

定义: 为创建一组相关或相互依赖的对象提供一个接口, 而且无需指定他们的具体类

跟工厂模式的区别就是 工厂也有个接口规范

在jdk的源码中就有一个不太明显的抽象工厂模式:
  • 那就是List接口, 它在iterable的基础上, 扩展一个创建产品的方法
  • 其中的iterator() 与listIterator() 尽管后者是前者的子类 但是两者的功能是不一样的
  • Iterator是只能向后移动的迭代器
  • ListIerator是能够前后移动的迭代器
  • 所以说两者应该是不同的产品

这张图很能表现他们之间关系

list接口uml图

在这我只能说这张图真好

  • 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

总结:

  • 简单工厂, 工厂无抽象 简单工厂违背了开闭原则
  • 工厂模式, 抽象工厂, 抽象产品, 但是只能创建一个系列的产品
  • 抽象工厂模式, 可以拥有多产品线

尽管看上去工厂模式比较简单, 但是大都数人开发的时候并没有想过这个问题, 我是没想过, 好了抓紧吧

posted @ 2017-03-29 11:51  hassenli  阅读(167)  评论(0编辑  收藏  举报