当前位置: 首页 > news >正文

湖北聚四方建设有限公司网站广东省建设监理协会网站

湖北聚四方建设有限公司网站,广东省建设监理协会网站,企业手机网站cms系统,微信小程序制作价格目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 迭代器模式是一种常用的设计模式#xff0c;它主要用于遍历集合对象#xff0c;提供一种方法顺序访问一个聚合对象中的各个元素#xff0c;而又不暴露该对象的内部表示。 举个简单的…目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 迭代器模式是一种常用的设计模式它主要用于遍历集合对象提供一种方法顺序访问一个聚合对象中的各个元素而又不暴露该对象的内部表示。 举个简单的比喻聚合对象像一个存放苹果的篮子迭代器就像篮子边上的搬运工专门负责把苹果一个一个取出来。客户端只需要找到搬运工然后不停地让他取出苹果就可以了而不需要关心篮子里面是怎么存放的。这样既方便客户端使用也屏蔽了聚合对象内部的复杂性 二、UML类图 三、角色设计 角色描述抽象聚合角色定义存创建、添加、获取等迭代器对象的接口具体聚合角色抽象聚合角色的实现类返回一个具体迭代器实例抽象迭代器角色定义访问和遍历聚合元素的接口通常包裹hashNext()和next()方法具体迭代器角色实现抽象迭代器接口中所定义的方法完成聚合对象的遍历记录遍历的当前为止客户端角色用于使用迭代器遍历聚合对象 四、案例分析 用迭代器模式模拟一个学生管理系统主要内容如下 1、定义Student类表示学生信息。 2、定义StudentAggregate接口作为学生集合的抽象接口。 3、实现StudentAggregateImpl类具体的学生集合使用List存储Student。 4、定义Iterator接口规定迭代器的通用方法。 5、实现StudentIterator类具体的学生迭代器。 6、在客户端代码中通过迭代器遍历StudentAggregateImpl中的学生集合。 通过迭代器模式实现对学生集合的遍历同时隐藏学生集合的具体实现细节示例代码如下 定义学生类 public class Student {private String name;private int age;public Student(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public int getAge() {return age;} } 学生集合抽象聚合类 public interface StudentAggregate {public Iterator createIterator();public int getNumberOfStudents();public Student getStudent(int index);public void addStudent(Student student);} 学生集合具体聚合角色 import java.util.ArrayList; import java.util.List;public class StudentAggregateImpl implements StudentAggregate{private ListStudent students;public StudentAggregateImpl() {students new ArrayList();}Overridepublic Iterator createIterator() {return new StudentIterator(this);} Overridepublic int getNumberOfStudents() {return students.size();}Overridepublic Student getStudent(int index) {return students.get(index);}Overridepublic void addStudent(Student student) {students.add(student);} } 抽象迭代器角色 public interface Iterator {public boolean hasNext();public Student next();} 学生具体迭代器角色 public class StudentIterator implements Iterator {private StudentAggregate studentAggregate;private int index;public StudentIterator(StudentAggregate studentAggregate) {this.studentAggregate studentAggregate;}Overridepublic boolean hasNext() {return (index studentAggregate.getNumberOfStudents());}Overridepublic Student next() {return studentAggregate.getStudent(index);}} 客户端 public class Client {public static void main(String[] args) {//使用示例StudentAggregate students new StudentAggregateImpl();// 添加学生Student john new Student(John, 18);Student mike new Student(Mike, 18);students.addStudent(john);students.addStudent(mike);Iterator iterator students.createIterator();while(iterator.hasNext()) {Student student iterator.next();System.out.println(student.getName());}} }运行结果如下 这个迭代器模式在学生管理示例中的执行逻辑过程  1、定义Student类用于表示学生信息。 2、定义StudentAggregate接口作为抽象学生集合类声明管理学生的通用方法。 3、实现StudentAggregateImpl类具体的学生集合使用List存储Student对象。 4、定义Iterator接口规定迭代器的通用方法。 5、实现StudentIterator类具体的学生迭代器持有对StudentAggregate的引用。 6、创建StudentAggregateImpl对象students表示具体的学生集合。 7、调用students的addStudent()方法向集合中添加学生。 8、调用students的createIterator()方法获取迭代器对象。 9、使用迭代器的hasNext()和next()方法遍历students集合访问其中的学生对象。 10、在整个过程中客户端代码都只与Iterator接口发生依赖而不需了解学生集合的具体实现/ 这样通过迭代器模式可以实现学生集合的遍历同时也达到了对访问学生集合的控制和集合内部表示的封装。  五、总结 优点 1、隔离了集合对象的遍历行为抽象出一个迭代器类来负责迭代元素。 2、提供了一种方法顺序访问一个聚合对象中的各个元素而又无需暴露该对象的内部表示。 3、迭代器简化了聚合类。客户端如果需要遍历聚合对象只需要初始化一个迭代器不需要知道聚合对象内部的具体实现。 4、在同一个聚合类中可以定义多个遍历方式通过不同的迭代器来实现。 5、符合单一职责原则。 6、实现了集合类的常用遍历算法容易扩展和维护。 缺点 1、增加了类的个数代码复杂度会增加需要维护更多的代码。 2、多态性能损耗。遍历时需要进行多次虚函数调用遍历效率降低。 3、遍历算法复用性差。每次遍历都需要创建新的迭代器实例无法重用已定义好的遍历算法。 应用场景 1、访问一个聚合对象的内容而无需暴露它的内部表示。 2、为遍历不同的集合结构提供一个统一的接口即支持多态迭代。 3、提供一种方法顺序访问一个聚合对象中的各个元素而又无需暴露该对象的内部表示。 4、分离集合对象的遍历行为到一个独立的迭代器类中。 符合的设计原则 1、单一职责原则Single Responsibility Principle 迭代器模式将集合对象的遍历行为抽象到迭代器类中集合类只负责存储迭代器类只负责遍历。二者职责区分明确符合单一职责原则。 2、开闭原则Open Closed Principle 可以在不修改集合类的情况下定义新的迭代器类满足扩展需求。增强了系统的可扩展性。 3、依赖倒转原则Dependency Inversion Principle 迭代器模式中集合类和客户端都依赖于抽象迭代器接口而不是依赖于具体迭代器类倒转了依赖关系。 4、组合复用原则Composite Reuse Principle 客户端可以统一使用迭代器接口遍历不同的集合类复用迭代器提供的遍历功能。 5、里氏替换原则Liskov Substitution Principle 迭代器模式中每个迭代器类都可以通过继承迭代器接口替换基类迭代器角色。
http://www.huolong8.cn/news/12613/

相关文章:

  • 什么求职网站可以做几份简历linux网站开发工具
  • 广州做网站网站安全建设步骤
  • 建站过程海报素材网站推荐
  • 如何做公司网站简述企业网站建设实施的步骤
  • 企业网站托管趋势网站推广怎么做比较好
  • 化妆品网站开发可行性网站域名.xin
  • 作品集制作网站自己买台服务器做网站
  • 网站怎么做双机房切换网站开发软硬件配置
  • 江苏省住房和城乡建设厅官方网站新网免费空间
  • 马尔康网站建设上海网站开发制作公司
  • 下陆区建设局网站西安未央区今天出啥事了
  • 响应式环保网站模板中国香烟网上商城
  • 百度网站管理网站建设建站网易互客
  • 旅游网站开发方案pptWordPress抓取豆瓣
  • 门户网站建设多久建立企业网站的目的和意义
  • 网站域名如何从代理商那里转出来西安哪家公司做网站
  • 梵讯企业网站建设中国进口贸易网官网
  • 常州专业网站建设公司哪家好开发app成本
  • 网站怎么做流量统计肥城网站建设推广
  • 外贸免费开发网站模板乌苏市电力建设工程公司网站
  • 为朋友做的网站舆情处置的五个步骤
  • 网站与网页的关系wordpress非凡主题里导航下拉菜单
  • 做网站免费送域名网站cn域名注册
  • 网站建设必备的功能模块寮步镇仿做网站
  • 丽水市莲都区建设局网站ae模板
  • 路由下做网站映射Wordpress 相同tag
  • iis .net 网站架设做网站反链
  • 做自媒体需要用的网站济宁教育平台网站建设
  • 自己可以建设网站卖东西吗西安网站建设推广公司哪家好
  • 个人备案能做企业网站吗wordpress怎么不调用文字内容