博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之模板&迭代器&组合模式
阅读量:7104 次
发布时间:2019-06-28

本文共 1016 字,大约阅读时间需要 3 分钟。


前言

这是本人的设计模式学习笔记,把自己学习过程中的一些总结和认识记录下来,与诸君共勉。本日为大家带来模板模式,迭代器模式,组合模式。

模板模式

基本概念

  • 钩子:一种方法,在抽象类中不做或只做默认的事,让子类选择是否覆盖
  • 模板:定义算法的基本骨架
  • 原语:模板中的单元动作,往往以方法实现

模板方法模式指在一个方法中定义一个算法的骨架,进而将一些步骤的实现延迟到子类中,使得子类可以在不改变算法结构的前提下重定义算法步骤。

给出模板模式的结构示意图:

模板模式结构示意图

实现

  • 子类继承,覆盖钩子方法
  • 不需要显式的继承和类,只要分别对不同的应用对象实现模板里的原语方法

模板 vs 策略

  • 模板使用继承而策略使用对象组合的方式让客户选择算法实现
  • 模板减少了代码重复但策略更有弹性
  • 模板依赖程度更高

结语

模板的实际使用十分广泛,我们经常在使用时还未意识到这是模板模式。模板模式的许多变体也并不如标准形式那么规范,而被一眼认出。

迭代器模式

定义

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

迭代器的概念和聚合这一数据结构是紧密相关的,这一结构比较有代表性的有数组、vector、list等。迭代器是一个非常常用的工具,在许多现代语言中都提供了迭代器的实现。我们给出迭代器的结构示意图:

迭代器模式结构示意图

特性:

  • 迭代器允许访问聚合的元素而不暴露内部结构
  • 将聚合遍历的工作封装进一个对象
  • 依赖聚合提供遍历
  • 提供通用接口,使用多态机制

注意

  • 努力让一个类只完成一个责任
  • 不应该对迭代器取出的元素顺序作出假设

组合模式

定义

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

下面给出组合模式的结构示意图:

组合模式结构示意图

应用场景

一个为大家所熟知的就是dom树,每一个节点都暴露出了诸如on等通用接口,可以索引到它的子节点,可以说是一个非常典型的组合模式。

注意

  • 提供一个能同时包含个别对象和组合对象的结构
  • 实现时有许多设计上的折衷,在透明性和安全性之间

对于组合模式能说的并不多,就我个人而言,更多认为它只是一种数据结构上的扩展,即是利用组合来实现了多叉树的结构,然后对每个节点暴露相同的接口以将一些本来是结构相关的操作(比如遍历,指向孩子等)隐藏起来,让上层可以十分方便以树分支为单位进行操作而非是节点为单位。

设计原则

  • 单一责任原则:类应该只有一个改变的理由
  • 尽量避免底层调用高层以造成环形依赖

转载地址:http://nyjhl.baihongyu.com/

你可能感兴趣的文章
java中类加载机制
查看>>
冒泡排序
查看>>
(转)Spring读书笔记-----Spring核心机制:依赖注入
查看>>
定向爬虫 - Python模拟新浪微博登录
查看>>
排版题2
查看>>
Centos下yum安装 apache+php环境 以及redis扩赞
查看>>
Algorithm | Vector
查看>>
mysql crash cource 书中实例
查看>>
Java Basis
查看>>
让所有人都能看懂日志,解放开发
查看>>
url传值出现中文乱码的另类解决办法
查看>>
jdk、jre、spring、java ee、java se
查看>>
zabbix自动清理30天前的数据
查看>>
客户区和非客户区
查看>>
Android调用相册拍照控件实现系统控件缩放切割图片
查看>>
【转】Excel2010中绘制流程图
查看>>
"无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开"解决办法...
查看>>
【原】oracle11G AWR使用及分析
查看>>
<20190104>关掉一些鸡肋的Win10功能
查看>>
iOS网络篇4-利用NSURLConnection实现GET/POST/HEAD请求
查看>>