博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迭代器模式(Iterator)
阅读量:6151 次
发布时间:2019-06-21

本文共 3537 字,大约阅读时间需要 11 分钟。

迭代器模式(Iterator)要解决的问题:聚类的遍历和处理
迭代器模式(Iterator)定义:

例子:菜单合并,第一个菜单采用数组,第二个菜单采用List,第三个菜单采用(key,value),现在服务员需要打印所有菜单上的菜品

解决:让这三个菜单提供一个接口对象(该接口提供访问菜单上的菜品的方法),使用该对象即可访问菜品

数组需要实现Iterator接口,List已经实现,map.values().iterator()

目录结构:

1240
Paste_Image.png

FirstMenu:

public class FirstMenu {    private MenuItem[] menu = new MenuItem[3];    private int i = 0;    public FirstMenu() {        this.addMenuItem(new MenuItem("西瓜", "我是西瓜", 1));        this.addMenuItem(new MenuItem("哈密瓜", "我是哈密西瓜", 2));        this.addMenuItem(new MenuItem("角瓜", "我是角瓜", 3));    }    public MenuItem[] getMenu() {        return menu;    }    public void addMenuItem(MenuItem item) {        menu[i] = item;        i++;    }    public Iterator getIterator() {        return new FistMenuIterator();    }    class FistMenuIterator implements Iterator {        private int position = 0;        @Override        public boolean hasNext() {            return position < FirstMenu.this.i;        }        @Override        public Object next() {            MenuItem item = FirstMenu.this.menu[this.position];            this.position++;            return item;        }        @Override        public void remove() {        }    }}

SecondMenu:

public class SecionMenu {    private ArrayList list = new ArrayList();    public SecionMenu() {        this.list.add(new MenuItem("土豆", "tudobu", 4));        this.list.add(new MenuItem("茄子", "213124", 5));        this.list.add(new MenuItem("豆角", "jhgkuyi", 6));    }    public Iterator getIterator() {        return this.list.iterator();    }}

ThirdMenu:

public class ThirdMenu {    private Map
map = new HashMap
(); public ThirdMenu() { map.put("1", new MenuItem("牛肉", "牛肉馅饺子", 20)); map.put("2", new MenuItem("羊肉", "羊肉馅饺子", 30)); map.put("3", new MenuItem("猪肉", "猪肉馅饺子", 10)); } public Iterator getIterator() { return this.map.values().iterator(); }}

菜品实体:MenuItem

public class MenuItem {    private String name;    private String desc;    private int price;    public MenuItem(String name, String desc, int price) {        this.name = name;        this.desc = desc;        this.price = price;    }    public String getName() {        return name;    }    public String getDesc() {        return desc;    }    public int getPrice() {        return price;    }}

服务员Waitress持有访问菜单聚合实体中每个对象的接口(Iterator)的集合

public class Waitress {    private List
list; public Waitress() { this.list = new ArrayList
(); } public void addMenu(Iterator menu) { this.list.add(menu); } public void printAllMenu() { for (Iterator iterator : list) { System.out.println("-----------------------------"); while (iterator.hasNext()) { MenuItem item = (MenuItem) iterator.next(); System.out.println(item.getName() + ":" + item.getDesc() + ":" + item.getPrice()); } System.out.println("-----------------------------"); } }}

测试类Main:

public class Main {    public static void main(String[] args) {        FirstMenu firstMenu = new FirstMenu();        SecionMenu secionMenu = new SecionMenu();        ThirdMenu thirdMenu = new ThirdMenu();        Waitress waitress = new Waitress();        waitress.addMenu(firstMenu.getIterator());        waitress.addMenu(secionMenu.getIterator());        waitress.addMenu(thirdMenu.getIterator());        waitress.printAllMenu();    }}

输出结果:

1240
Paste_Image.png

总结 面向接口编程,接口中提供访问对象的方法(对对象的一系列动作),想对对象做某些更改或者查询时直接向外暴露接口即可。

转载地址:http://nszfa.baihongyu.com/

你可能感兴趣的文章
ubuntu set defult jdk
查看>>
[译]ECMAScript.next:TC39 2012年9月会议总结
查看>>
【Xcode】编辑与调试
查看>>
用tar和split将文件分包压缩
查看>>
[BTS] Could not find stored procedure 'mp_sap_check_tid'
查看>>
PLSQL DBMS_DDL.ALTER_COMPILE
查看>>
Activity生命周期
查看>>
高仿UC浏览器弹出菜单效果
查看>>
Ubuntu忘记密码,进不了系统的解决方法
查看>>
[原创]白盒测试技术思维导图
查看>>
<<Information Store and Management>> 读书笔记 之八
查看>>
Windows 8 开发之设置合约
查看>>
闲说HeartBeat心跳包和TCP协议的KeepAlive机制
查看>>
MoSQL
查看>>
Hibernate多对一外键单向关联(Annotation配置)
查看>>
《CLR via C#》读书笔记 之 方法
查看>>
设计模式:组合模式(Composite Pattern)
查看>>
ContentValues 和HashTable区别
查看>>
LogicalDOC 6.6.2 发布,文档管理系统
查看>>
给PowerShell脚本传递参数
查看>>