java设计模式--行为型模式--迭代模式

 1                                             迭代器模式
 2  概述
 3     给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
 4
 5
 6  适用性
 7     1.访问一个聚合对象的内容而无需暴露它的内部表示。
 8
 9     2.支持对聚合对象的多种遍历。
10
11     3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。
12
13
14  参与者
15     1.Iterator
16       迭代器定义访问和遍历元素的接口。
17
18     2.ConcreteIterator
19       具体迭代器实现迭代器接口。
20       对该聚合遍历时跟踪当前位置。
21
22     3.Aggregate
23       聚合定义创建相应迭代器对象的接口。
24
25     4.ConcreteAggregate
26       具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例.

当我看到这个模式的时候,我真的惊呆了,我联想起平时我们的for循环与迭代器。

 1 public class Test {
 2
 3     public static void main(String[] args) {
 4         List list = new ListImpl();
 5         list.add("a");
 6         list.add("b");
 7         list.add("c");
 8         //第一种迭代方式
 9         Iterator it = list.iterator();
10         while (it.hasNext()) {
11             System.out.println(it.next());
12         }
13
14         System.out.println("=====");
15         //第二种迭代方式
16         for (int i = 0; i < list.getSize(); i++) {
17             System.out.println(list.get(i));
18         }
19     }
20 }
 1 public interface List {
 2
 3     Iterator iterator();
 4
 5     Object get(int index);
 6
 7     int getSize();
 8
 9     void add(Object obj);
10 }
 1 public class ListImpl implements List {
 2
 3     private Object[] list;
 4
 5     private int index;
 6
 7     private int size;
 8
 9     public ListImpl() {
10         index = 0;
11         size = 0;
12         list = new Object[100];
13     }
14
15     public Iterator iterator() {
16         return new IteratorImpl(this);
17     }
18
19     public Object get(int index) {
20         return list[index];
21     }
22
23     public int getSize() {
24         return this.size;
25     }
26
27     public void add(Object obj) {
28         list[index++] = obj;
29         size++;
30     }
31 }
 1 public interface Iterator {
 2
 3     Object next();
 4
 5     void first();
 6
 7     void last();
 8
 9     boolean hasNext();
10 }
 1 public class IteratorImpl implements Iterator {
 2
 3     private List list;
 4
 5     private int index;
 6
 7     public IteratorImpl(List list) {
 8         index = 0;
 9         this.list = list;
10     }
11
12     public void first() {
13         index = 0;
14     }
15
16     public void last() {
17         index = list.getSize();
18     }
19
20     public Object next() {
21         Object obj = list.get(index);
22         index++;
23         return obj;
24     }
25
26     public boolean hasNext() {
27         return index < list.getSize();
28     }
29 }

java设计模式--行为型模式--迭代模式

时间: 2024-10-20 10:38:01

java设计模式--行为型模式--迭代模式的相关文章

Java设计模式(二)——迭代模式

迭代模式的基本定义:对于一组对象集合(数组.堆栈.列表或散列),用户无需关心它的底层实现而能够通过调用统一接口遍历当中的所有元素.由于jdk已经对常见的迭代模式实现了封装,本文直接提供Collection和Iterator两个接口的模拟. 定义Iterator接口 /* * 设计迭代接口 */ public interface Iterator<E> { // 测试是否有下一个元素 boolean hasNext(); // 返回下一个元素 E next(); } Iterator.java

java设计模式--行为型模式--命令模式

1 命令模式 2 概述 3 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 4 5 6 适用性 7 1.抽象出待执行的动作以参数化某对象. 8 9 2.在不同的时刻指定.排列和执行请求. 10 11 3.支持取消操作. 12 13 4.支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍. 14 15 5.用构建在原语操作上的高层操作构造一个系统. 16 17 18 参与者 19 1.Command 20 声明执行操作的接口.

设计模式(行为型)之迭代器模式(Iterator Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之观察者模式(Observer Pattern)>http://blog.csdn.net/yanbober/article/details/45484749 概述 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构

[设计模式-行为型]责任链模式(Chain of Responsibility)

概括 名称 Chain of Responsibility 结构 动机 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可处理一个请求的对象集合应被动态指定. 解析 形象比喻: 晚上去上英语课, 为了好开溜坐到了最后一排, 哇, 前面坐了好几个漂亮的MM 哎

设计模式(行为型)之策略模式(Strategy Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之迭代器模式(Iterator Pattern)>http://blog.csdn.net/yanbober/article/details/45497881 概述 使用策略模式可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封

设计模式(行为型)之备忘录模式(Memento Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之中介者模式(Mediator Pattern)>http://blog.csdn.net/yanbober/article/details/45533335 概述 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无

设计模式(行为型)之解释器模式(Interpreter Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之访问者模式(Visitor Pattern)>http://blog.csdn.net/yanbober/article/details/45536787 概述 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个

Java设计模式(十) 备忘录模式 状态模式

(十九)备忘录模式 备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象. class Memento{ private String value; public Memento(String value){ this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } class Storage

Java设计模式(五)外观模式 桥梁模式

(九)外观模式 外观模式为子系统提供一个接口,便于使用.解决了类与类之间关系的,外观模式将类之间的关系放在一个 Facade 类中,降低了类类之间的耦合度,该模式不涉及接口. class CPU { public void startup(){ System.out.println("cpu start"); } public void shutdown(){ System.out.println("cpu stop"); } } class Memory { pu