zoukankan      html  css  js  c++  java
  • 11迭代器模式

    图片来自head first 设计模式,仅供学习之用

    事实证明光看是没有用的,实践才能出真知,迭代器模式没有我想想的那么简单,写了个小例子才发现自己的理解并不深刻。例子是仿照head first的。迭代器是一个完整的类,作用是遍历集合对象。所以迭代器需要保存在集合中的位置信息,还需要保持对集合对象的一个引用,以便返回下一个集合元素。要运用迭代器,集合对象要能够产生对应的迭代器。凡是满足迭代器接口的都可以用迭代器遍历,但是不同集合的迭代器的实现是不同的,取决于设计 存放数据的数据结构

    package com.company;
    
    public interface MyIterator {
        public boolean hasNext();
        public Object next();
    }
    class MenuItem{
        private String name;
        private double price;
        public MenuItem(String name,double price){
            this.name=name;
            this.price=price;
        }
    
        public String getName() {
            return name;
        }
    
        public double getPrice() {
            return price;
        }
    }
    class MenuIterator implements MyIterator{
        private MenuItem[] menuItems;
        private int pos;
        public MenuIterator(MenuItem[]menuItems){
            this.menuItems=menuItems;
            pos=0;
        }
        @Override
        public boolean hasNext() {
            if (pos>=menuItems.length||menuItems[pos]==null)return false;
            else return true;
        }
    
        @Override
        public Object next() {
            MenuItem menuItem=menuItems[pos];
            pos++;
            return menuItem;
        }
    }
    //agregate
    class Menu{
        static final int MAX_ITEMS=100;
        private String menuName;
        private MenuItem[] menuItems;
        private int numOfItems;
        public Menu(){
            menuItems=new MenuItem[MAX_ITEMS];
            add(new MenuItem("青菜",2));
            add(new MenuItem("红烧肉",6));
            add(new MenuItem("番茄炒蛋",3.5));
            add(new MenuItem("牛肉",7));
            add(new MenuItem("包菜",1.5));
        }
        void add(MenuItem menuItem){
            if(numOfItems>=MAX_ITEMS){
                System.out.println("菜单满了");
                return;
            }
            menuItems[numOfItems]=menuItem;
            numOfItems++;
        }
        MyIterator getIterator(){
            return new MenuIterator(menuItems);
        }
    }
    class MyIteratorTest{
        public static void test(){
            Menu menu=new Menu();
            MyIterator myIterator=menu.getIterator();
            PrintMenu(myIterator);
    
        }
        static void PrintMenu(MyIterator myIterator){
            while (myIterator.hasNext()){
                MenuItem menuItem=(MenuItem)myIterator.next();
                System.out.println(menuItem.getName()+","+menuItem.getPrice());
            }
        }
    }
  • 相关阅读:
    HttpURLConnection请求网络数据的GET请求
    ImageLoader的Jar包加载图片
    使用HttpUtils 上传视频文件
    VideoView的视频播放
    VideoView的视频的全屏播放
    Android中在activity中弹出一个popwindow
    随心而记
    Java -- springboot 配置 freemarker
    Tensorflow替换静态图中的OP
    python 系统定时关机
  • 原文地址:https://www.cnblogs.com/MalcolmMeng/p/8780330.html
Copyright © 2011-2022 走看看