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代码中都帮我们写好了


posted on 2019-09-28 11:08  菜鸟乙  阅读(164)  评论(0编辑  收藏  举报