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

建设注册中心网站自己怎么注册网站模板

建设注册中心网站,自己怎么注册网站模板,桂林漓江20元背面图,WordPress表单支付插件备忘录模式和迭代器模式备忘录模式代码示例迭代器模式代码示例使用迭代器遍历集合的同时不能删除/增加元素总结备忘录模式 备忘录模式#xff0c;也叫快照#xff08;Snapshot#xff09;模式。 在 GoF的《设计模式》⼀书中#xff0c;备忘录模式是这么定义的#xff1a;… 备忘录模式和迭代器模式备忘录模式代码示例迭代器模式代码示例使用迭代器遍历集合的同时不能删除/增加元素总结备忘录模式 备忘录模式也叫快照Snapshot模式。 在 GoF的《设计模式》⼀书中备忘录模式是这么定义的 Captures and externalizes an object’s internal state so that it can be restored later, all without violating encapsulation. 在不违背封装原则的前提下捕获⼀个对象的内部状态并在该对象之外保存这个状态以便之后恢复对象为先前的状态属于行为型模式。 备忘录模式主要分为三个角色 : 发起人角色(Originator): 它是一个需要保存状态的类可以创建一个备忘录/备份并存储它的当前内部状态也可以使用备忘录来恢复其内部状态。 **备忘录角色 Memento**存储原发器的内部状态。除了发起人备忘录类不能被其他类创建和修改。一般通过将Memento类与Originator类定义在同一个包中来实现封装也可以作为内部类使用默认访问标识符来定义Memento类即保证其包内可见。 **负责人角色 Caretaker**负责人又称为管理者它负责保存备忘录。在负责人类中可以存储一个或多个备忘录对象它只负责存储备忘录对象而不能修改备忘录对象负责人类只提供备忘录对象的读写接口不提供备忘录属性的读写接口。 代码示例 以一个文本编辑器为例用户可以不断输入文本内容也可以撤销上次输入的内容按照备忘录模式实现如下: public class InputText {private StringBuilder text new StringBuilder();public void input(String input) {text.append(input);}public String show() {return text.toString();}public Snapshot createSnapshot() {return new Snapshot(this.text.toString());}public void restoreSnapshot(Snapshot snapshot) {text.replace(0, this.text.length(), snapshot.getText());}} public class Snapshot {private String text;public Snapshot(String text) {this.text text;}public String getText() {return text;} }public class SnapshotHolder {private StackSnapshot stack new Stack();public Snapshot getSnapshot() {return stack.pop();}public void pushSnapshot(Snapshot snapshot) {stack.push(snapshot);} }public class Test {public static void main(String[] args) {SnapshotHolder snapshotHolder new SnapshotHolder();InputText text new InputText();text.input(你好);System.out.println(text.show());snapshotHolder.pushSnapshot(text.createSnapshot());text.input(我是Xiaoming);System.out.println(text.show());System.out.println(回撤);text.restoreSnapshot(snapshotHolder.getSnapshot());System.out.println(text.show());}}对于⼤对象的备份来说备份占⽤的存储空间会⽐较⼤备份和恢复的耗时会⽐较⻓。针对这个问题不同的业务场景有不同的处理⽅式。⽐如只备份必要的恢复信息结合最新的数据来恢复 再⽐如全量备份和增量备份相结合低频全量备份⾼频增量备份两者结合来做恢复。 迭代器模式 迭代器模式Iterator Design Pattern也叫作游标模式Cursor Design Pattern它提供一种顺序访问容器或者集合对象元素的方法而又无需暴露集合内部表示。属于行为型模式 迭代器模式一般包含四个角色 抽象容器 : 提供创建迭代器的接口 具体容器 : 创建具体迭代器 抽象迭代器 : 定义遍历元素的接口 具体迭代器 : 实现元素遍历行为 一般来说我们会在容器中定义 iterator() ⽅法⽤来创建迭代器。迭代器接⼝中需要定义 hasNext()、next() 两个最基本的⽅法用于遍历。 代码示例 public interface IteratorT {public boolean hasNext();T next(); }public class ListIterator implements IteratorString{private ListString queue;private int cursor 0;public ListIterator(ListString queue) {this.queue queue;}Overridepublic boolean hasNext() {return cursor ! queue.size();}Overridepublic String next() {String name queue.get(cursor);cursor;return name;} }public interface Queue {void add(String name);void remove(String name);Iterator iterator();} public class QueueImpl implements Queue{private ListString list new ArrayList();Overridepublic void add(String name) {list.add(name);}Overridepublic void remove(String name) {list.remove(name);}Overridepublic Iterator iterator() {return new ListIterator(list);} } public class Test {public static void main(String[] args) {QueueImpl queue new QueueImpl();queue.add(小明);queue.add(小花);queue.add(王一);IteratorString iterator queue.iterator();while (iterator.hasNext()) {String name iterator.next();System.out.println(name);}} }使用迭代器遍历集合的同时不能删除/增加元素 在通过迭代器来遍历集合元素的同时增加或者删除集合中的元素有可能会导致某个元素被重复遍历或遍历不到。(这是因为为了保持数组存储数据的连续性数组的删除/插入操作会涉及元素的搬移) 针对这种问题有两种解决⽅案⼀种是遍历的时候不允许增删元素另⼀种是增删元素之后让遍历报错。 第一种实现比较困难我们可以方便的知道遍历开始的时间点但是我们无法知晓遍历什么时候结束(它可能获取到某个满足条件的值之后就结束遍历了)而通过新方法告知集合遍历结束也比较容易遗漏。 Java采用的是第二种方法: 增删元素之后让遍历报错 Java在ArrayList 中定义了一个成员变量modCount记录集合被修改的次数。集合每次新增或者删除元素就会给modCount1。 当用户创建迭代器的时候我们把modCount 值传递给迭代器的 expectedModCount 成员变量之后每次调⽤迭代器上的next()方法我们都会检查集合上的 modCount 是否等于expectedModCount也就是判断在创建完迭代器之后集合是否改变过。 private class Itr implements IteratorE {int cursor; // index of next element to returnint lastRet -1; // index of last element returned; -1 if no suchint expectedModCount modCount;Itr() {}public boolean hasNext() {return cursor ! size;}SuppressWarnings(unchecked)public E next() {checkForComodification();int i cursor;if (i size)throw new NoSuchElementException();Object[] elementData ArrayList.this.elementData;if (i elementData.length)throw new ConcurrentModificationException();cursor i 1;return (E) elementData[lastRet i];}final void checkForComodification() {if (modCount ! expectedModCount)throw new ConcurrentModificationException();}} 总结 集合遍历⼀般有三种⽅式for 循环、foreach 循环、迭代器遍历。 后两种本质上属于⼀种都可以看作迭代器遍历。 相对于 for 循环遍历利⽤迭代器来遍历有下⾯三个优势 迭代器模式封装集合内部的复杂数据结构开发者不需要了解如何遍历直接使⽤容器提供的迭代器即可迭代器模式将集合对象的遍历操作从集合类中拆分出来放到迭代器类中让两者的职责更加单⼀ (对于复杂的数据结构图树等客户端自己实现遍历算法比较复杂也容易出错)因为迭代器都实现⾃相同的接⼝在开发中基于接⼝⽽⾮实现编程替换/新增迭代器也变得更加容易
http://www.hkea.cn/news/14476415/

相关文章:

  • 网站页面设计尺寸建设部或国土资源管理局的网站
  • 最佳配色网站个人交互网站
  • 网站开发发展现状it项目网站开发的需求文档
  • 永清网站建设做网站编辑的发展方向晋升
  • 网站转移北郊网站建设
  • 怎么做一键添加信任网站猎场第几集做的网站推广
  • 做网站时兼容分辨率wordpress安全锁
  • php靓号网站源码找游戏的手游平台
  • 做网站和推广工资多少钱手机网站一定要与pc网站一样
  • 网站权重怎么做成都网站建设制作公司
  • dede网站错位做视频网站服务器
  • 网站介绍词如何套用别人网站模板
  • 网站流量太高 如何做负载均衡网站中的给我留言怎么做
  • 网站编辑年终总结自己做网站如何赚钱吗
  • 百度联盟 网站备案信息南京网络营销
  • 关于网站开发中网站上传网站接入服务单位名称
  • 公司网站建设推荐乐云seo企业网站项目的流程
  • 网站建设基本知识代码网站全屏宽度是多少
  • 如何查公司网站开发时间网站建设辶金手指排名十二
  • 百度怎么建设网站常用的电子商务网站
  • 定制开发一般多少钱无锡网站制作优化推广
  • 无锡网站建设制作温州网站设计服务
  • 网站开发专业广州营销课程培训班
  • 便利的邯郸网站建设asp.net网站开发基础
  • 新校区建设网站承德做网站
  • 网站工作建设站电话云服务器使用教程
  • 深圳松岗网站建设网页传奇游戏排行榜2022
  • 制作网站制作公司WordPress 多厂商
  • 公民道德建设网站如何做色流量网站
  • 福州网站建设公司哪个好适合seo软件