java设计模式之迭代器模式
来源:互联网 发布:手机淘宝产品链接 编辑:程序博客网 时间:2024/04/30 02:23
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
类图:
使用迭代器模式,实现了烤鱼菜单,类图:
MenuItem类代码实现:
public class MenuItem { String name; public MenuItem(String name){ this.name = name; } public String getname(){ return name; }}
接口Iterator代码实现:
public interface Iterator { public boolean hasNext(); public Object next(); public void remove();}
类FishIterator代码实现:
public class FishIterator implements Iterator{ MenuItem[] items; int position = 0; public FishIterator(MenuItem[] items){ this.items = items; } @Override public boolean hasNext() { // TODO Auto-generated method stub if (position >=items.length || items[position] == null) { return false; }else { return true; } } @Override public Object next() { // TODO Auto-generated method stub MenuItem menuItem = items[position]; position = position + 1; return menuItem; } @Override public void remove() { // TODO Auto-generated method stub for (int i = position; i < (items.length -1); i++) { items[i] = items[i+1]; } items[items.length - 1] = null; }}
接口Menu代码实现:
public interface Menu { public Iterator createIterator();}
类FishMenu代码实现:
public class FishMenu implements Menu{ MenuItem[] items; static final int MAX_ITEMS = 6; int numberOfItems = 0; public FishMenu(){ items = new MenuItem[MAX_ITEMS]; addItem("烤鲫鱼"); addItem("烤草鱼"); addItem("烤大头鱼"); addItem("烤秋刀鱼"); addItem("烤鲨鱼"); } public void addItem(String name){ MenuItem menuItem = new MenuItem(name); if (numberOfItems >= MAX_ITEMS) { System.out.println("Sorry,menu if full!can't add item to menu"); }else { //System.out.println("menuItem="+menuItem); items[numberOfItems] = menuItem; numberOfItems = numberOfItems + 1; } } @Override public Iterator createIterator() { // TODO Auto-generated method stub return new FishIterator(items); }}
类Client代码实现:
public class Client { Menu fisMenu; public Client(Menu fishMenu){ this.fisMenu = fishMenu; } public void printMenu(){ Iterator fishIterator = fisMenu.createIterator(); printMenu(fishIterator); } public void printMenu(Iterator iterator){ while (iterator.hasNext()) { MenuItem menuItem = (MenuItem)iterator.next(); System.out.println(menuItem.getname()); } }}
测试类MenuTest代码实现:
public class MenuTest { public static void main(String[] args){ Menu fishMenu = new FishMenu(); Client client = new Client(fishMenu); client.printMenu(); }}
执行结果:
烤鲫鱼烤草鱼烤大头鱼烤秋刀鱼烤鲨鱼
0 0
- Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- 深入浅出Java设计模式之迭代器模式
- 深入浅出Java设计模式之迭代器模式
- 深入浅出Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- 深入浅出Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- 深入浅出Java设计模式之迭代器模式
- Java设计模式之迭代器模式
- JAVA-设计模式之迭代器模式
- Java设计模式笔记之迭代器模式
- Java设计模式泛型化之迭代器模式
- 深入浅出Java设计模式之迭代器模式
- 快排算法
- hpuoj 1210: OY问题 [搜索]
- codevs 1231_最优布线问题_最小生成树
- 【Ado.Net】基础知识+简单实例
- python使用mysql数据库
- java设计模式之迭代器模式
- (22)Java学习笔记——常用对象API / String类
- [leetcode]481. Magical String
- 狄利克雷分布的matlab代码实现和R语言函数调用
- Hello Blog
- angularjs自定义供应商
- 【bzoj1355】 Baltic2009
- 博客搬家
- 创建 vxlan 并部署 instance - 每天5分钟玩转 OpenStack(147)