- 浏览: 187726 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (321)
- eclipse (4)
- idea (2)
- Html (8)
- Css (14)
- Javascript (8)
- Jquery (6)
- Ajax Json (4)
- Bootstrap (0)
- EasyUI (0)
- Layui (0)
- 数据结构 (0)
- Java (46)
- DesPattern (24)
- Algorithm (2)
- Jdbc (8)
- Jsp servlet (13)
- Struts2 (17)
- Hibernate (11)
- Spring (5)
- S2SH (1)
- SpringMVC (4)
- SpringBoot (11)
- WebService CXF (4)
- Poi (2)
- JFreeChart (0)
- Shiro (6)
- Lucene (5)
- ElasticSearch (0)
- JMS ActiveMQ (3)
- HttpClient (5)
- Activiti (0)
- SpringCloud (11)
- Dubbo (6)
- Docker (0)
- MySQL (27)
- Oracle (18)
- Redis (5)
- Mybatis (11)
- SSM (1)
- CentOS (10)
- Ant (2)
- Maven (4)
- Log4j (7)
- XML (5)
最新评论
3. 行为型模式 (4) 迭代器模式
1. 迭代器模式
2. 迭代子模式
3. 迭代子模式
迭代器模式(Iterator Pattern)用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 优点: 1. 它支持以不同的方式遍历一个聚合对象。 2. 迭代器简化了聚合类。 3. 在同一个聚合上可以有多个遍历。 4. 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。 缺点: 1. 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
1. 迭代器模式
package com.andrew.pattern0304.iterator.model01; public interface Iterator { public boolean hasNext(); public Object next(); } package com.andrew.pattern0304.iterator.model01; public interface Container { public Iterator getIterator(); }
package com.andrew.pattern0304.iterator.model01; public class NameRepository implements Container { public String names[] = {"Robert" , "John" ,"Julie" , "Lora"}; @Override public Iterator getIterator() { return new NameIterator(); } private class NameIterator implements Iterator { int index; @Override public boolean hasNext() { if (index < names.length) { return true; } return false; } @Override public Object next() { if (this.hasNext()) { return names[index++]; } return null; } } }
package com.andrew.pattern0304.iterator.model01; /** * 1. 迭代器模式 * * @author andrew * @date 2018/08/01 */ public class Client { public static void main(String[] args) { NameRepository namesRepository = new NameRepository(); for (Iterator iter = namesRepository.getIterator(); iter.hasNext();) { String name = (String)iter.next(); System.out.println("Name : " + name); } } } 运行结果: Name : Robert Name : John Name : Julie Name : Lora
角色: 1. 抽象迭代子(Iterator)角色:此抽象角色定义出遍历元素所需的接口。 2. 具体迭代子(ConcreteIterator)角色:此角色实现了Iterator接口,并保持迭代过程中的游标位置。 3. 聚集(Aggregate)角色:此抽象角色给出创建迭代子(Iterator)对象的接口。 4. 具体聚集(ConcreteAggregate)角色:实现了创建迭代子(Iterator)对象的接口,返回一个合适的具体迭代子实例。 5. 客户端(Client)角色:持有对聚集及其迭代子对象的引用,调用迭代子对象的迭代接口,也有可能通过迭代子操作聚集元素的增加和删除。
2. 迭代子模式
package com.andrew.pattern0304.iterator.model02; public abstract class Aggregate { public abstract Iterator createIterator(); }
package com.andrew.pattern0304.iterator.model02; public class ConcreteAggregate extends Aggregate { private Object[] objArray = null; public ConcreteAggregate(Object[] objArray) { this.objArray = objArray; } @Override public Iterator createIterator() { return new ConcreteIterator(this); } public Object getElement(int index) { if (index < objArray.length) { return objArray[index]; } else { return null; } } public int size() { return objArray.length; } }
package com.andrew.pattern0304.iterator.model02; public interface Iterator { public void first(); public void next(); public boolean isDone(); public Object currentItem(); }
package com.andrew.pattern0304.iterator.model02; public class ConcreteIterator implements Iterator { private ConcreteAggregate agg; private int index = 0; private int size = 0; public ConcreteIterator(ConcreteAggregate agg) { this.agg = agg; this.size = agg.size(); index = 0; } @Override public void first() { index = 0; } @Override public void next() { if (index < size) { index ++; } } @Override public boolean isDone() { return (index >= size); } @Override public Object currentItem() { return agg.getElement(index); } }
package com.andrew.pattern0304.iterator.model02; /** * 2. 迭代器模式 * * @author andrew * @date 2018/08/01 */ public class Client { public void operation() { Object[] objArray = {"One","Two","Three","Four","Five","Six"}; Aggregate agg = new ConcreteAggregate(objArray); Iterator it = agg.createIterator(); while (!it.isDone()) { System.out.println(it.currentItem()); it.next(); } } public static void main(String[] args) { Client client = new Client(); client.operation(); } } 运行结果: One Two Three Four Five Six
3. 迭代子模式
package com.andrew.pattern0304.iterator.model03; public abstract class Aggregate { public abstract Iterator createIterator(); }
package com.andrew.pattern0304.iterator.model03; public interface Iterator { public void first(); public void next(); public boolean isDone(); public Object currentItem(); }
package com.andrew.pattern0304.iterator.model03; public class ConcreteAggregate extends Aggregate { private Object[] objArray = null; public ConcreteAggregate(Object[] objArray) { this.objArray = objArray; } @Override public Iterator createIterator() { return new ConcreteIterator(); } private class ConcreteIterator implements Iterator { private int index = 0; private int size = 0; public ConcreteIterator() { this.size = objArray.length; index = 0; } @Override public void first() { index = 0; } @Override public void next() { if (index < size) { index ++; } } @Override public boolean isDone() { return (index >= size); } @Override public Object currentItem() { return objArray[index]; } } }
package com.andrew.pattern0304.iterator.model03; /** * 3. 迭代器模式 * * @author andrew * @date 2018/08/01 */ public class Client { public void operation() { Object[] objArray = {"One","Two","Three","Four","Five","Six"}; Aggregate agg = new ConcreteAggregate(objArray); Iterator it = agg.createIterator(); while (!it.isDone()) { System.out.println(it.currentItem()); it.next(); } } public static void main(String[] args) { Client client = new Client(); client.operation(); } } 运行结果: One Two Three Four Five Six
发表评论
-
3. 行为型模式 (11) 解释器模式
2018-11-08 10:39 3943. 行为型模式 (11) 解释器模式 解释器模式(In ... -
3. 行为型模式 (10) 中介者模式
2018-11-08 09:56 3663. 行为型模式 (10) 中介者模式 中介者模式(Me ... -
3. 行为型模式 (9) 访问者模式
2018-11-07 14:30 3703. 行为型模式 (9) 访问者模式 访问者模式(Vis ... -
3. 行为型模式 (8) 状态模式
2018-11-07 09:13 4533. 行为型模式 (8) 状态模式 状态模式(State ... -
3. 行为型模式 (7) 备忘录模式
2018-11-06 14:27 4313. 行为型模式 (7) 备忘录模式 备忘录模式(Mem ... -
3. 行为型模式 (6) 命令模式
2018-11-06 11:40 3793. 行为型模式 (6) 命令模式 命令模式(Comma ... -
3. 行为型模式 (5) 责任链模式
2018-11-06 09:40 4333. 行为型模式 (5) 责任链模式 责任链模式(Cha ... -
3. 行为型模式 (3) 观察者模式
2018-11-02 16:17 4453. 行为型模式 (3) 观察者模式 当对象间存在一对多 ... -
3. 行为型模式 (2) 模板方法模式
2018-11-02 09:26 4153. 行为型模式 (2) 模板方法模式 在模板模式(Te ... -
3. 行为型模式 (1) 策略模式
2018-11-01 09:23 4373. 行为型模式 (1) 策略模式 在策略模式(Stra ... -
2. 结构型模式 (3) 代理模式
2018-10-29 11:26 3712. 结构型模式 (3) 代理模式 代理模式(Proxy ... -
2. 结构型模式 (7) 享元模式
2018-10-30 13:27 4132. 结构型模式 (7) 享元模式 享元模式(Flywe ... -
2. 结构型模式 (6) 组合模式
2018-10-30 09:50 3642. 结构型模式 (6) 组合模式 组合模式(Compo ... -
2. 结构型模式 (2) 装饰者模式
2018-10-29 09:30 4092. 结构型模式 (2) 装饰器模式 装饰器模式(Dec ... -
2. 结构型模式 (5) 桥接模式
2018-10-30 09:11 3932. 结构型模式 (5) 桥接模式 桥接(Bridge) ... -
2. 结构型模式 (4) 外观模式
2018-10-29 14:20 3492. 结构型模式 (4) 外观模式 外观模式(Fac ... -
2. 结构型模式 (1) 适配器模式
2018-10-26 15:35 3842. 结构型模式 (1) 适配器模式 将一个类的接口转换 ... -
1. 创建型模式 (2) 原型模式
2018-09-12 13:46 7411. 创建型模式 (2) 原型模式 用原型实例指定创建对 ... -
1. 创建型模式 (3) 建造者模式
2018-10-25 16:28 3711. 创建型模式 (3) 建造 ... -
1. 创建型模式 (1) 单例模式
2018-09-12 13:42 4301. 创建型模式 (3) 单例模式 单例模式是为确保一个 ...
相关推荐
迭代器模式是软件设计模式中的一种行为模式,它在C++以及其他面向对象编程语言中有着广泛的应用。这个模式的主要目标是允许用户以一种统一的方式遍历聚合对象中的元素,而无需暴露聚合对象的内部结构。这增加了代码...
迭代器模式(IteratorPattern)是设计模式中的一种行为模式,它提供了一种顺序访问聚合对象元素的方法,同时又不暴露其底层表示。这种模式允许我们遍历集合对象的元素,而无需暴露其内部结构。在Java、C#等面向对象...
设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...
迭代模式是一种行为设计模式,它允许我们通过统一的接口遍历集合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,迭代器模式被广泛使用,尤其是在集合类库中,如ArrayList、LinkedList等。下面我们...
4. **迭代**:通过求解子空间内的特征值问题来逼近固有频率和对应的振型。每次迭代通常会通过增广子空间和更新特征值解来提高精度。 5. **柱状规范化**:"column_normalization.m"可能是用于对振型进行归一化的函数...
这个“新版设计模式手册”深入浅出地介绍了设计模式的三大类:创建型模式、结构型模式和行为模式,为开发者提供了一套详细的设计说明。 一、创建型模式 创建型模式主要关注对象的创建过程,它们的目标是使得对象的...
总体来说设计模式分为三大类:创建型模式,共五种:...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
本资源主要涵盖了创建模式、结构模式和行为模式三大类,每种模式都是面向对象设计的核心部分。 创建模式主要用于解决对象的创建问题,使得对象的创建过程更加灵活,易于扩展。其中: 1. 工厂模式(Factory Pattern...
设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): ...策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
* 迭代子模式:迭代子模式是一种行为型模式,它可以将对象之间的关系建立在迭代子的基础上,以便于更好地实现对象之间的关系。 * 责任链模式:责任链模式是一种行为型模式,它可以将对象之间的关系建立在责任链的...
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
4. 迭代子模式:提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 5. 责任链模式:将请求的发送者和接收者解耦,使得多个对象都有机会处理这个请求。 6. 命令模式:将请求封装为一个对象,以便使用不同...
按照不同的功能特性,设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 #### 二、创建型模式 创建型模式主要用于解决对象创建的过程,旨在简化对象创建的复杂度,同时保持对象创建的灵活性。主要...
迭代器模式是软件设计模式中的行为模式之一,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java编程语言中,迭代器模式的应用尤为广泛,尤其是在处理集合类如ArrayList、LinkedList等时。这...
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
23种设计模式的特点定义、优缺点、使用场景,源码中...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
16. 迭代器模式:迭代器模式是一种行为型模式,它提供了一种顺序访问聚合对象中元素的方法,同时又不暴露其底层表示。 17. 责任链模式:责任链模式是一种行为型模式,它允许将请求沿着处理者链进行传递,直到被某个...
3. 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 4. 观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生...
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。