设计模式迭代器模式(IteratorPattern)
2018-01-03 15:48
543 查看
核心模块:迭代器角色(定义访问和遍历元素的接口),具体迭代器角色,容器角色,具体容器角色
所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git
使用场景:外部对象访问内部聚合对象;
优点:将存储数据和遍历数据分开,符合单一职责原则;
缺点:新聚合类,就要增加新的迭代器类;增加系统复杂性;
内容打印
Hello World!
-->0 还珠格格 琼瑶小说改变
-->1 新三国 媲美冰与火之歌的史诗电视剧
-->1 肖生克的救赎 一部人性解救的电影
-->2 哈利波特1 讲述了一个奇幻魔法世界
-->3 变形金刚 人与外星机器人并肩战斗
-->4 哈利波特1 讲述了一个奇幻魔法世界
-->5 变形金刚 人与外星机器人并肩战斗
所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git
使用场景:外部对象访问内部聚合对象;
优点:将存储数据和遍历数据分开,符合单一职责原则;
缺点:新聚合类,就要增加新的迭代器类;增加系统复杂性;
/** * Created by tory on 2017/12/29. * 迭代器模式 */ public class IteratorPattern { public static void main(String[] args) { //客户端要柔和业务员A和B的代码,两个聚合类; TVChannelMenu tvChannelMenu = new TVChannelMenu(); TVMovieMenu tvMovieMenu = new TVMovieMenu(); printMenu(tvChannelMenu.createIterator()); printMenu(tvMovieMenu.createIterator()); } //如果不使用迭代器模式这里要写两个循环遍历 public static void printMenu(Iterator<DataItem> iterator) { while (iterator.hasNext()) { DataItem item = iterator.next(); System.out.println("-->" + item.id + " " + item.name + " " + item.des); } } } //数据结构 class DataItem { int id; String name; String des; public DataItem(int id, String name, String des) { this.id = id; this.name = name; this.des = des; } } //Iterator 迭代器角色 interface Iterator<T> { boolean hasNext(); T next(); } //Concrete Iterator 具体迭代器角色 class TvChannelIterator implements Iterator<DataItem> { List<DataItem> list; int position = 0; public TvChannelIterator(List<DataItem> list) { this.list = list; } @Override public boolean hasNext() { return (position < list.size() - 1); } @Override public DataItem next() { return list.get(position++); } } //Container 容器角色 interface Container { void add(DataItem item); Iterator createIterator(); } //ConcreteContainer具体容器角色 class TVChannelMenu implements Container { //业务员A提供的数据代码 List<DataItem> tvchannels = new ArrayList<>(); public TVChannelMenu() { tvchannels.add(new DataItem(0, "还珠格格", "琼瑶小说改变")); tvchannels.add(new DataItem(1, "新三国", "媲美冰与火之歌的史诗电视剧")); tvchannels.add(new DataItem(2, "抗日神剧", "呵呵")); } @Override public void add(DataItem item) { if (null == item) { return; } tvchannels.add(item); } @Override public Iterator createIterator() { Iterator iterator = new TvChannelIterator(tvchannels); return iterator; } } //Concrete Iterator 具体迭代器角色 class TVMovieIterator implements Iterator<DataItem> { DataItem[] datas; int MAX_LEN = 5; int position = 0; public TVMovieIterator(DataItem[] datas) { this.datas = datas; } @Override public boolean hasNext() { return position < MAX_LEN; } @Override public DataItem next() { return datas[position++]; } } //ConcreteContainer具体容器角色 class TVMovieMenu implements Container{ //业务员B提供的数据代码 DataItem[] movies = new DataItem[5]; public TVMovieMenu() { movies[0] = new DataItem(1, "肖生克的救赎", "一部人性解救的电影"); movies[1] = new DataItem(2, "哈利波特1", "讲述了一个奇幻魔法世界"); movies[2] = new DataItem(3, "变形金刚", "人与外星机器人并肩战斗"); movies[3] = new DataItem(4, "哈利波特1", "讲述了一个奇幻魔法世界"); movies[4] = new DataItem(5, "变形金刚", "人与外星机器人并肩战斗"); } @Override public void add(DataItem item) { } @Override public Iterator createIterator() { TVMovieIterator iterator = new TVMovieIterator(movies); return iterator; } }
内容打印
Hello World!
-->0 还珠格格 琼瑶小说改变
-->1 新三国 媲美冰与火之歌的史诗电视剧
-->1 肖生克的救赎 一部人性解救的电影
-->2 哈利波特1 讲述了一个奇幻魔法世界
-->3 变形金刚 人与外星机器人并肩战斗
-->4 哈利波特1 讲述了一个奇幻魔法世界
-->5 变形金刚 人与外星机器人并肩战斗
相关文章推荐
- .NET设计模式-迭代器模式(Iterator Pattern)
- .NET设计模式(18):迭代器模式(Iterator Pattern)
- 我所理解的设计模式(C++实现)——迭代器模式(Iterator Pattern)
- 设计模式学习总结-迭代器模式(Iterator Pattern)
- 极速理解设计模式系列:16.迭代器模式(Iterator Pattern)
- 深入浅出设计模式——迭代器模式(Iterator Pattern)
- 设计模式拾荒之迭代器模式 ( Iterator Pattern )
- 设计模式 - 迭代器模式(iterator pattern) 具体解释
- 设计模式-迭代器模式(iterator pattern)
- 设计模式14 - 迭代器模式【Iterator Pattern】
- 设计模式之迭代器模式(Iterator Pattern)
- java设计模式——迭代器模式(Iterator Pattern)
- .NET设计模式-迭代器模式(Iterator Pattern)
- 解读设计模式----迭代器模式(Iterator Pattern) 推荐
- 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
- 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)
- 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)
- 十九.行为型设计模式——Iterator Pattern(迭代器模式)
- 【23种设计模式】之 迭代器模式(Iterator Pattern)
- 设计模式:迭代器模式(Iterator Pattern)