zoukankan      html  css  js  c++  java
  • 设计模式课程 设计模式精讲 18-2 迭代器模式coding

    1    代码演练

    1.1  代码演练1(迭代器模式演练)

    1.2  代码使用场景

    1    代码演练
    1.1  代码演练1(迭代器模式演练)

    需求:

    课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表。

    uml类图:

    测试类:

    package com.geely.design.pattern.behavioral.iterator;
    
    public class Test {
        public static void main(String [] args){
            //新增6个课程
            Course course1 = new Course("java电商一期");
            Course course2 = new Course("java电商二期");
            Course course3 = new Course("java电商三期");
            Course course4 = new Course("java前端HTML一期");
            Course course5 = new Course("java前端HTML二期");
            Course course6 = new Course("java设计模式一期");
    
            //将6个课程放到list中去
            CourseAggregate courseAggregate = new CourseAggregateImpl();
            courseAggregate.addCourse(course1);
            courseAggregate.addCourse(course2);
            courseAggregate.addCourse(course3);
            courseAggregate.addCourse(course4);
            courseAggregate.addCourse(course5);
            courseAggregate.addCourse(course6);
    
            print(courseAggregate);
    
            courseAggregate.removeCourse(course1);
            courseAggregate.removeCourse(course3);
            print(courseAggregate);
        }
    
    
        /**
         * 此方法 传入CourseAggregate而不是CourseIterator 比较好,
         * 如果传入 CourseIterator ,CourseIterator 只能此初始化一次,也就是只能打印一个循环
         * @param courseAggregate
         */
        public static void print(CourseAggregate courseAggregate){
        //正常代码中,我们直接写getIterator()就可以了,代码规范通常它们获取得的直接是变量的迭代器 CourseIterator courseIterator
    = courseAggregate.getCourseIterator(); while (!courseIterator.isLastCourse()){ Course course = courseIterator.nextCourse(); System.out.println(course.getName()); } System.out.println("==========================================================="); } }

    实体类(课程):

    package com.geely.design.pattern.behavioral.iterator;
    
    /**
     * 迭代器实体类
     */
    public class Course {
    
        /**
         * 方便for循环打印使用
         */
        public String getName() {
            return name;
        }
    
        private String name;//定义属性名称
    
        /**
         * 方便注值使用
         * @param name
         */
        public Course(String name) {
            this.name = name;
        }
    }

    课程迭代接口:

    package com.geely.design.pattern.behavioral.iterator;
    
    public interface CourseIterator {
        Course nextCourse();
        boolean isLastCourse();
    }

    课程迭代实现:

    package com.geely.design.pattern.behavioral.iterator;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class CourseIteratorImpl implements CourseIterator{
        private List listCourseAggre ;
        private int position;
        private Course course;
        public CourseIteratorImpl(List listCourseAggre) {
            this.listCourseAggre = listCourseAggre;
        }
    
        @Override
        public Course nextCourse() {
            System.out.println("返回课程位置"+position);//第一次,没有值,默认为0
            course = (Course) listCourseAggre.get(position);
            position++;
            return course;
        }
    
        @Override
        public boolean isLastCourse() {
            if(position<listCourseAggre.size()){
                return false;
            }else{
                return true;
            }
        }
    
    }

    课程列表调用接口:

    package com.geely.design.pattern.behavioral.iterator;
    
    public interface CourseAggregate {
        void addCourse(Course course);
        void removeCourse(Course course);
        CourseIterator getCourseIterator();
    }

    课程列表调用实现:

    package com.geely.design.pattern.behavioral.iterator;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class CourseAggregateImpl implements CourseAggregate {
    
        private List list1;
        public CourseAggregateImpl() {
            this.list1 = new ArrayList();
        }
    
    
        @Override
        public void addCourse(Course course) {
            list1.add(course);
        }
        @Override
        public void removeCourse(Course course) {
            list1.remove(course);
        }
    
        @Override
        public CourseIterator getCourseIterator() {
            return new CourseIteratorImpl(list1);
        }
    }

    打印结果:

    返回课程位置0
    java电商一期
    返回课程位置1
    java电商二期
    返回课程位置2
    java电商三期
    返回课程位置3
    java前端HTML一期
    返回课程位置4
    java前端HTML二期
    返回课程位置5
    java设计模式一期
    ===========================================================
    返回课程位置0
    java电商二期
    返回课程位置1
    java前端HTML一期
    返回课程位置2
    java前端HTML二期
    返回课程位置3
    java设计模式一期
    ===========================================================
    
    Process finished with exit code 0

     1.2  代码使用场景

    通常不用我们自己写迭代器,jdk代码中都帮我们写好了

    
    
  • 相关阅读:
    Sql Server Profiler使用
    用PowerDesign反向生成数据库Sql语句问题
    使用PowerDesign15反向生成数据库
    离线安装Sharepoint工具
    开发Windows服务
    Windows Server 2008 R2 安装域
    Entity Framework执行Sql语句返回DataTable
    GO 学习资源收集
    Ubuntu常用命令大全
    MVC MVC3中 ViewBag、ViewData和TempData的使用和区别 【转】
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/11602122.html
Copyright © 2011-2022 走看看