码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之抽象工厂模式读后

时间:2017-03-29 12:31:55      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:list   net   http   产品   设计   区别   block   size   大致   

原文地址 : 抽象工厂模式

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

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

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

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

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

技术分享

在这我只能说这张图真好

  • 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

总结:

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

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

设计模式之抽象工厂模式读后

标签:list   net   http   产品   设计   区别   block   size   大致   

原文地址:http://www.cnblogs.com/denghailei/p/6639062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!