适配器模式实例:反向迭代器
来源:互联网 发布:淘宝下载安装2016正版 编辑:程序博客网 时间:2024/06/05 22:54
一般来说,如果我们直接继承Iterable类,并覆盖iterator()方法,我们只能替换现有的方法,而不能实现选择。在这里,我们希望在默认的前向迭代器的基础上,添加一个反向迭代器,因此我们不能使用覆盖,而是添加一个能够产生Iterable对象的方法,该对象可以用于foreach语句,并可以实现反向迭代的功能。
当我们实现一个接口(前向迭代)并还需要另一个接口的某项功能(反向迭代)时,可以采用适配器模式轻松解决这个问题。代码如下:
package content.ch12;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Iterator;class ReversibleArrayList<T> extends ArrayList<T> { public ReversibleArrayList(Collection<T> c) { super(c); } public Iterable<T> reversed() { return new Iterable<T>() { public Iterator<T> iterator() { return new Iterator<T>() { int current = size() - 1; public boolean hasNext() { return current > -1; } public T next() { return get(current--); } }; } }; }}public class AdapterMethodIdiom { public static void main(String[] args) { ReversibleArrayList<String> ral = new ReversibleArrayList<String>( Arrays.asList("To be or not to be".split(" "))); // Grabs the ordinary iterator via iterator() for (String s : ral) { System.out.print(s + " "); } System.out.println(); // Hand it the Iterable of your choice for (String s : ral.reversed()) { System.out.print(s + " "); } }}
输出如下:
To be or not to be be to not or be To
如果直接将ral对象置于foreach语句中,将得到默认的前向迭代器。但是当我们在该对象上调用reversed()方法得到一个新的自定义的Iterable对象时,就会产生我们自己设定的行为(反向迭代器)。
来自:《Java编程思想》 第十一章 适配器方法惯用法
阅读全文
0 0
- 适配器模式实例:反向迭代器
- 适配器模式 简单实例
- 适配器模式实例
- 设计模式----适配器模式 实例
- 适配器模式实例(C#)
- 代理模式 适配器模式 装饰模式 实例
- 设计模式php实例:适配器模式
- C#实例解析适配器设计模式
- C#实例解析适配器设计模式
- 适配器模式---姚明打篮球实例
- 适配器模式原理及实例介绍
- 适配器模式之迭代器模式
- C# 适配器模式和适配器模式实例(两个应用实例)
- 【设计模式】之实例化适配器(Adapter)模式
- 设计模式实例系列文章之适配器模式
- 设计模式之适配器模式(Adapter)简单实例
- 大话设计模式--适配器模式 Adapter -- C++实现实例
- java 设计模式--适配器模式(实例快速理解)
- 静态库和动态库(共享库)
- static关键字的作用
- 未编译整理
- Centos6.9 调试静态IP教程攻略
- 跟垃圾回收相关的关键选项
- 适配器模式实例:反向迭代器
- A universal match pattern ('/**') is defined before other patterns in the filter chain
- ARGB色彩模式
- IO流操作
- Android启动第三方app报错
- Wordpress利用固定链接从read more到自建页面
- mysql数据库创建外键时报MySQL ERROR:1005 Can't create table (erron:150)错误
- lintcode Two Sum
- 项目管理中的敏捷实践