当前位置: 首页 > wzjs >正文

南昌淘宝网站制作公司wordpress 微信连接数据库

南昌淘宝网站制作公司,wordpress 微信连接数据库,跨境电商自建站平台,做采集的网站有流量吗说明:本文介绍设计模式中,行为型设计模式之一的迭代器模式。 定义 迭代器模式(Iterator Pattern),也叫作游标模式(Cursor Pattern),它提供一种按顺序访问集合/容器对象元素的方法&…

说明:本文介绍设计模式中,行为型设计模式之一的迭代器模式。

定义

迭代器模式(Iterator Pattern),也叫作游标模式(Cursor Pattern),它提供一种按顺序访问集合/容器对象元素的方法,而又无须暴露集合内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内元素的组成结构。(引自《设计模式就该这样学》P329)

行车记录仪场景

假设有一个行车记录仪对象,可存储行车记录时的视频,可存储10个视频,超出会覆盖最早的数据,如下:

/*** 行车记录仪*/
public class DrivingRecorder {/*** 当前记录的位置*/private int index = -1;/*** 假设只能存储10个视频*/private String[] records = new String[10];/*** 存入*/public void append(String record) {// 如果当前位置已经到达末尾,就从头开始存储if (index == 9) {index = 0;} else {index++;}records[index] = record;}/*** 顺序遍历*/public void display() {for (int i = 0; i < 10; i++) {System.out.println(i + ":" + records[i]);}}/*** 按照存入顺序逆序遍历* 从新=>旧读取*/public void displayByOrder() {// loopCount:是集合能存储的数据个数,故不能大于10;// i是记录的位置,存的时候+1,读的时候-1,并且还要做==0判断,如果==0,就从集合末尾开始读;for (int i = index, loopCount = 0; loopCount < 10; i = i == 0 ? 9 : i - 1, loopCount++) {System.out.println(records[i]);}}
}

运行如下,可见存入12个视频,把前面存储的两个视频数据覆盖了。

在这里插入图片描述

分析
(1)无法读取到行车记录仪中的数据(即变量records),当然我们可以开放对应的get方法,但这样设计遍历和读取数据方法不免有重复(现成的index变量还没用上,不可惜嘛?),我们能否扩展遍历方法,返回当前位置上的数据?;

(2)代码不够优雅,对于一个封闭的对象或者说容器,遍历对象内的数据,我们是否可以考虑抽出成一个接口,定义遍历的规范,使其他对象实现其接口。

迭代器设计

针对上面行车记录仪场景,改造成迭代器设计模式,如下:

import java.util.Iterator;/*** 行车记录仪(迭代器设计)*/
public class DrivingRecorderIterable implements Iterable<String> {/*** 当前记录的位置*/private int index = -1;/*** 假设只能存储10个视频*/private String[] records = new String[10];/*** 存入*/public void append(String record) {// 如果当前位置已经到达末尾,就从头开始存储if (index == 9) {index = 0;} else {index++;}records[index] = record;}@Overridepublic Iterator<String> iterator() {return new Itr();}/*** 行车记录仪迭代器*/private class Itr implements Iterator<String> {/*** cursor:游标,这里通过赋值拷贝一份,不要直接使用index,不然一边读一边写的时候会出错* loopCount:是集合能存储的数据个数,故不能大于10*/int cursor = index;int loopCount = 0;@Overridepublic boolean hasNext() {return loopCount < 10;}@Overridepublic String next() {int i = cursor;if (i == 9) {i = 0;} else {i++;}cursor = i;loopCount++;return records[i];}}
}

这里使用的接口是JDK自带的Iterator,实现该接口的类都能使用上述方式遍历数据。

在这里插入图片描述

Java中的单列集合,Collection,实现了该接口,也就是说实现了Collection接口的容器,都支持这种迭代器的遍历方式。

在这里插入图片描述

像ArrayList

        List<String> list = new ArrayList<>();list.add("王麻子");list.add("小李子");list.add("李爱花");Iterator<String> iterator = list.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}

使用场景

在《设计模式就该这样学》(P330)这本书中,提到迭代器模式适用于以下场景:

(1)访问一个集合对象的内容而无须暴露它的内部表示。

(2)为遍历不同的集合结构提供一个统一的访问接口;


结合上述行车记录仪场景,如果你需要访问一个对象中的数据,又不想开放对应数据的get方法,就可以考虑迭代器模式。

总结

本文介绍了行为型设计模式中的迭代器模式,参考《设计模式就该这样学》、《秒懂设计模式》两书,行车记录仪场景是《秒懂设计模式》中的举例,非常形象,容易理解。


文章转载自:

http://gHejT10C.ymprn.cn
http://wwDCEkct.ymprn.cn
http://PJ2IXfpr.ymprn.cn
http://2z1hTCdZ.ymprn.cn
http://dpxSaj9j.ymprn.cn
http://d1oXhJde.ymprn.cn
http://7Yvf7bZM.ymprn.cn
http://Lez9VNBS.ymprn.cn
http://R5aV2jy1.ymprn.cn
http://aDwQwfJe.ymprn.cn
http://yVZnh5wY.ymprn.cn
http://iSieBn2C.ymprn.cn
http://TlBsHGDP.ymprn.cn
http://fh6FtvBI.ymprn.cn
http://qzOss0U8.ymprn.cn
http://Nut3xOgk.ymprn.cn
http://Usm4TZWD.ymprn.cn
http://9mDg2YFf.ymprn.cn
http://TkOAJ2SP.ymprn.cn
http://rkMNyQwU.ymprn.cn
http://r3XWXesM.ymprn.cn
http://XKzMqqJn.ymprn.cn
http://6supUggG.ymprn.cn
http://XqfmBVNB.ymprn.cn
http://nIYTl980.ymprn.cn
http://69YkX5ek.ymprn.cn
http://eGbQURzY.ymprn.cn
http://eC3EiWys.ymprn.cn
http://qkvSm8co.ymprn.cn
http://GRFox8QH.ymprn.cn
http://www.dtcms.com/wzjs/655849.html

相关文章:

  • 兰州网站维护地方网站怎么做推广
  • 公司网站图片传不上去wordpress在IE9显示错位
  • 北京p2p网站建设即速应用小程序官网
  • 创意设计网站公司医药行业网站建设
  • 怎么推广公司网站做直播导航网站
  • 石家庄市环保局网站建设项目备案系统wordpress 评论贴图
  • 做国外的营销的网站vr网站建设
  • 民治营销型网站上国外的网站很慢
  • 自己做的网页加在网站文章上为什么打不开游戏网站排行
  • 电子商务网站怎么做推广创意界面
  • 北海住房和城乡建设局网站网站设计宽屏尺寸
  • 网站大全app下载代理记账包含哪些业务
  • 怀化找什么人做网站域名购买网站有哪些
  • 建设项目验收在哪个网站公示深圳建网站的公
  • 百度上如何做优化网站wordpress主题排名
  • 网站界面设计试题怎么做网页签到
  • 宁波网站建设流程利用excel做填报网站
  • 建站模板工程造价做金融的免费发帖的网站有哪些
  • 网站建设运营公司企业特色wordpress4中文
  • 做网站网页版和手机版企业咨询顾问的工作内容
  • 河南省和城乡建设厅网站首页wordpress英文源码
  • 百度推广 做网站河南省住房和建设厅安监站网站
  • 怎么修改网站备案信息怎么创建一个网页
  • 个人电台网站模版商城官方平台入口
  • 青岛网站推广 软件创意互动网站
  • 找外贸客户的网站品牌网络营销策划
  • 好的网站首页的特点竞价是什么工作
  • 二级域名对网站帮助吴桥县做网站
  • 进不了建设银行网站做网站英文编辑有前途
  • 网络教学网站建设北京定制网站开发公司浩森宇特