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


    原文地址 : 抽象工厂模式

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

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

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

    在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

    总结:

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

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

  • 相关阅读:
    uva11552
    zoj3820 树的直径+二分
    hdu 5068 线段树加+dp
    zoj3822
    uva1424
    DAY 36 前端学习
    DAY 35 前端学习
    DAY 34 PYTHON入门
    DAY 33 PYTHON入门
    DAY 32 PYTHON入门
  • 原文地址:https://www.cnblogs.com/denghailei/p/6639062.html
Copyright © 2020-2023  润新知