迭代器模式coding

本文详细解析了迭代器模式在课程管理系统中的应用,通过自定义迭代器实现对课程集合的遍历,展示了如何添加和删除课程,以及如何通过迭代器获取课程列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景源码,Test先不看,课程的集合抽象类,下面是课程集合的一个实现类,那CourseAggregate是一个接口,

接口也是类,可以把它理解成课程集合的抽象类,当然呢这里并不是AbstractClass,因为这里并没有具体的实现,

如果有的话我们可以把它声明成,abstract class,然后下面是具体的实现类,右侧是一个迭代器接口,下面是课程迭代器

的一个具体的实现,同时在迭代器里面通过组合的方式,一比一的关系,把Course作为Course迭代器的成员,那这个关系还是

非常清晰的,然后我们来到Test里边
package com.learn.design.pattern.behavioral.iterator;

/**
 * 业务场景是什么呢
 * 是网站的一个课程
 * 首先我们有一个课程的实体类
 * 这个课程有一个名字
 * 那在网站上有很多的课程
 * 我们可以对课程进行一些处理
 * 
 * 
 * @author Leon.Sun
 *
 */
public class Course {
    private String name;

    /**
     * 还有他的构造器
     * 
     * 
     * @param name
     */
    public Course(String name) {
        this.name = name;
    }

    /**
     * 还有getName这么一个方法
     * 
     * 
     * @return
     */
    public String getName() {
        return name;
    }

}
package com.learn.design.pattern.behavioral.iterator;

/**
 * CourseAggregate这么一个类
 * 这里面可以addCourse
 * 增加课程
 * 也可以removeCourse
 * 删除课程
 * 然后我们在这个接口下边
 * 又声明了一个方法
 * 获得这个课程的迭代器
 * 
 * 
 * @author Leon.Sun
 *
 */
public interface CourseAggregate {

    void addCourse(Course course);
    void removeCourse(Course course);

    /**
     * 注意返回值是CourseIterator
     * 那我们再看一下CourseIterator这个接口是什么呢
     * 
     * @return
     */
    CourseIterator getCourseIterator();



}
package com.learn.design.pattern.behavioral.iterator;

/**
 * 里边有两个方法
 * 一个是获取下一个课程
 * 还有判断是不是最后一个课程
 * 对应的实现我们看一下
 * 
 * 
 * @author Leon.Sun
 *
 */
public interface CourseIterator {
    Course nextCourse();
    boolean isLastCourse();

}
package com.learn.design.pattern.behavioral.iterator;

import java.util.List;

/**
 * 这个接口的实现
 * 
 * 
 * @author Leon.Sun
 *
 */
public class CourseIteratorImpl implements CourseIterator {

	/**
	 * 首先在里面声明一个private的List
	 * 这里面就是一个课程的集合
	 * 
	 * 
	 */
    private List courseList;
    /**
     * 权限可以使用private
     * 因为现在我们并没有对他进行开放
     * 
     * 
     */
    private int position;
    private Course course;
    /**
     * 传入的是课程的集合
     * 
     * 
     * @param courseList
     */
    public CourseIteratorImpl(List courseList){
        this.courseList=courseList;
    }

    /**
     * 我们主要关注实现的这两个方法
     * 首先第一个下一个课程
     * 
     * 然后继续来看这两个方法
     * 
     * 
     */
    @Override
    public Course nextCourse() {
    	/**
    	 * 这里直接输出返回课程是position
    	 * 而这个position就声明在迭代器里面的成员
    	 * 
    	 * 
    	 */
        System.out.println("返回课程,位置是: "+position);
        /**
         * 这里直接按位置取出对应的课程
         * 然后强转
         * 赋值到迭代器的course当中
         * 
         * 
         */
        course=(Course)courseList.get(position);
        /**
         * 然后位置++
         * 返回对应的Course
         * 
         * 
         */
        position++;
        return course;
    }

    /**
     * 然后看一下下边
     * 是最后一个课程吗
     * 
     * 
     */
    @Override
    public boolean isLastCourse(){
    	/**
    	 * 如果当前的位置小于集合的size的话
    	 * 我们就认为不是最后一个课程
    	 * 反之就会走到return true
    	 * 如果当前的位置大于等于size
    	 * 就会返回true
    	 * 那这两个实现都非常的简单
    	 * 我们通过这么一个业务场景呢
    	 * 来实现了一个迭代器模式
    	 * 自己来实现了一个迭代器
    	 * 这个迭代器是课程的迭代器
    	 * 那我们现在来看一下UML图
    	 * 
    	 * 
    	 */
        if(position< courseList.size()){
            return false;
        }
        return true;
    }
}
package com.learn.design.pattern.behavioral.iterator;

import java.util.ArrayList;
import java.util.List;

/**
 * 他实现了CourseAggregate接口
 * 
 * 
 * @author Leon.Sun
 *
 */
public class CourseAggregateImpl implements CourseAggregate {

	/**
	 * 这里面调用的正是list的add和remove方法
	 * 
	 * 
	 */
    private List courseList;

    /**
     * 然后我们在无参构造器里面初始化一下
     * 
     * 
     */
    public CourseAggregateImpl() {
        this.courseList = new ArrayList();
    }

    /**
     * 一个是增加课程
     * 当然这个是比较简单的业务场景
     * 放到构造器
     * 或者外部
     * 显示的编写都OK
     * 
     * 
     */
    @Override
    public void addCourse(Course course) {
        courseList.add(course);
    }

    /**
     * 一个是删除课程
     * 
     * 
     */
    @Override
    public void removeCourse(Course course) {
        courseList.remove(course);
    }

    /**
     * 还要写一个获取课程的迭代器
     * 那我们先进入到迭代器的实现类里边
     * 
     * 
     */
    @Override
    public CourseIterator getCourseIterator() {
        return new CourseIteratorImpl(courseList);
    }
}
package com.learn.design.pattern.behavioral.iterator;

/**
 * 
 * @author Leon.Sun
 *
 */
public class Test {


    public static void main(String[] args) {
    	/**
    	 * 这里首先创建6个课程
    	 * 现在网站上有这6个课程
    	 * 
    	 * 
    	 */
        Course course1 = new Course("Java电商一期");
        Course course2 = new Course("Java电商二期");
        Course course3 = new Course("Java设计模式精讲");
        Course course4 = new Course("Python课程");
        Course course5 = new Course("算法课程");
        Course course6 = new Course("前端课程");


        /**
         * 然后我们声明一个集合CourseAggregate
         * 
         * 
         */
        CourseAggregate courseAggregate = new CourseAggregateImpl();

        /**
         * 然后往里面添加课程
         * 而这个添加正是courseList的add方法
         * 那这6个课程添加完成之后呢
         * 输出一下课程的列表是什么
         * 
         * 
         */
        courseAggregate.addCourse(course1);
        courseAggregate.addCourse(course2);
        courseAggregate.addCourse(course3);
        courseAggregate.addCourse(course4);
        courseAggregate.addCourse(course5);
        courseAggregate.addCourse(course6);

        System.out.println("-----课程列表-----");
        /**
         * 这里有一个printCourses
         * 看一下下边的实现
         * 
         * 
         */
        printCourses(courseAggregate);

        /**
         * 然后在集合里面remove两个课程
         * 分别是4和5
         * 4和5对应的是python课程和算法课程
         * 然后接着往下看
         * 
         * 
         */
        courseAggregate.removeCourse(course4);
        courseAggregate.removeCourse(course5);

        /**
         * 这里输出一下删除操作之后的课程列表
         * 
         * 
         */
        System.out.println("-----删除操作之后的课程列表-----");
        /**
         * 又把这个集合打印了一下
         * 这个逻辑非常的简单
         * 我们run一下看一下结果就OK了
         * 结果已经出来了
         * 从最上面开始
         * 首先课程列表
         * 对应一下代码
         * printCourses这个方法
         * 就打印了
         * 返回课程位置是0
         * 我们迭代器也是从第0个位置开始
         * JAVA电商一期
         * 然后返回JAVA电商二期
         * 设计模式精讲
         * 还有Python课程
         * 算法课程
         * 前端课程
         * 然后进行了remove操作
         * 删除之后的课程列表是JAVA电商一期
         * JAVA电商二期
         * JAVA设计模式精讲
         * 注意我们删除的是原来的4和5
         * 那6就排在了第6位
         * 位置是3
         * 返回的正是前端课程
         * 那这个就是我们自己实现的一个课程迭代器
         * 那在前面也说了
         * 迭代器设计模式呢
         * 应用广泛
         * 使用率高
         * 但是我们几乎不会自己去写迭代器
         * 比如JDK里面的集合里面
         * 也都写好了迭代器
         * 我们直接使用就可以了
         * 那相信通过这一段的讲解
         * 能自己写出一个迭代器出来了
         * 
         * 
         */
        printCourses(courseAggregate);
    }


    /**
     * 这里面就使用迭代器了
     * 首先把这堆课程传过来
     * 然后获取这个课程的课程迭代器
     * 这里面可以直接getIterator
     * 只不过为了强调他是课程的迭代器
     * 也是为了强调这个业务场景
     * 那如果真的自己写迭代器的时候
     * 只要把这个方法声明成getIterator就可以了
     * 为什么
     * 因为我们是从CourseAggregate里面去获取迭代器
     * 获取的自然是Course的迭代器
     * 继续来看
     * 
     * 
     * 
     * @param courseAggregate
     */
    public static void printCourses(CourseAggregate courseAggregate){
        CourseIterator courseIterator= courseAggregate.getCourseIterator();
        /**
         * 拿到这个迭代器之后呢
         * 进行一个while循环
         * 判断他是不是最后一个课程
         * 前面有一个非
         * 如果判断出来迭代器前面的位置
         * 并不是最后一个课程的话
         * 那通过迭代器获取下一个课程实例
         * 然后输出出来
         * 那这里面就使用了这个迭代器
         * 声明成static
         * 为了在main里面调用
         * 
         * 
         */
        while(!courseIterator.isLastCourse()){
            Course course=courseIterator.nextCourse();
            System.out.println(course.getName());
        }
    }
}

 

内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值