zoukankan      html  css  js  c++  java
  • Head First 设计模式笔记(第八章 模板方法模式 & 第九章 适配器模式)

    第八章 模板方法模式 p275~314, 第九章 迭代器与组合模式 p315~384.

    概述

    模板方法模式, 定义了一个大的总方法, 和多个小的具体实现的方法. 总方法(算法)控制了总体的流程, 具体实现的方法给予了各个实现类的灵活性.
    迭代器模式, 将一个集合的遍历交给另一个对象来实现, 实现了权责分离. 同时统一了不同集合类型的遍历.
    组合模式, 将对象组合成树形结构来表现"整体/部分"层次结构. 组合能以一致的方式处理个别对象及对象组合.

    模板方法模式

    在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤.
    

    以排序算法举例, 不需要每个对象类都写一次排序算法, 排序算法已经写好了, 对象只需要实现Comparable的接口就可以.

    迭代器模式

    提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示.
    

    迭代器刚接触时, 觉得很难理解. 花里胡哨的操作太多. 仔细分析下来, 就是一个接口Iterator包含hasNext()next()两个方法, 内部用一个变量保存当前元素的位置.

    需要遍历集合时, 先创建迭代器createIterator(), 再使用方法hasNext()next()挨个取出元素.

    Iterator iterator = class.createIteraotr();
    while(iterator.hasNext()){
          Item item = iterator.next();
    }
    

    组合模式

    允许你将对象组合成树形结构来表现"整体/部分"层次结构. 组合能让客户以一致的方式处理个别对象以及对象组合.
    

    当设计一个包含无限层级的结构时, 一般想到的就是树结构. 树的节点分为普通节点和叶节点, 普通节点包含子节点, 叶节点不包含子节点.

    现实场景

    模板方法模式

    类库和框架有大量的"钩子"方法, 可以自己改写.

    迭代器模式

    一般用到集合的遍历

    组合模式

    树结构中用到

  • 相关阅读:
    css代码中position的定位,baidu+总结
    ibatis_HelloWorld
    v7系统,任务栏的开始图标和其他图标重合问题
    递归方法:输入一个多位整数,计算出从0到该数1出现的个数。
    解决JS:window.close()在Firefox下的不能关闭的问题
    Programming in the MidFuture(转)
    修改blog问题
    面向数据库的高级语言
    F#试用感受
    基于.net的数学编程语言
  • 原文地址:https://www.cnblogs.com/winwink/p/HeadFirstPattern_P5_TemplateMethod-Iterator.html
Copyright © 2011-2022 走看看