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

用户登录网站开发图片制作视频

用户登录网站开发,图片制作视频,wordpress长微博工具,网络营销平台的账号如何运营一、介绍 迭代器模式#xff08;Iterator Pattern#xff09;又称为游标#xff08;Cursor#xff09;模式#xff0c;是行为型设计模式之一。迭代器模式算是一个比较古老的设计模式#xff0c;其源于对容器的访问#xff0c;比如Java中的List、Map、数组等#xff0c…一、介绍 迭代器模式Iterator Pattern又称为游标Cursor模式是行为型设计模式之一。迭代器模式算是一个比较古老的设计模式其源于对容器的访问比如Java中的List、Map、数组等我们知道对容器对象的访问必然会涉及遍历算法我们可以将遍历的方法封装在容器中或者不提供遍历方法。如果我们将遍历的方法封装到容器中那么对于容器类来说就承担了过多的功能容器类不仅要维护自身内部的数据元素而且还要对外提供遍历的接口方法因为遍历状态的存储问题还不能对同一个容器同时进行多个遍历操作如果我们不提供遍历方法而让使用者自己去实现又会让容器的内部细节暴露无遗正因于此迭代模式应运而生在客户访问类与容器体之间插入了一个第三者——迭代器很好地解决了上面所述的弊端。 二、定义 提供一种方法顺序访问一个容器对象中的各个元素而又不需要暴露该对象的内部表示。 三、使用场景 遍历一个容器对象。 四、迭代器模式的UML类图 UML类图 通用模式代码 迭代器接口 public interface IteratorT {/*** 是否还有下一个元素* return true表示有false表示没有**/boolean hasNext();/*** 返回当前位置的元素并将位置移至下一位**/T next(); } 具体迭代器类 public class ConcreteIteratorT implements IteratorT{private ListT list;private int cursor 0;public ConcreteIterator(ListT list) {this.list list;}Overridepublic boolean hasNext() {return cursor ! list.size();}Overridepublic T next() {T obj null;if (this.hasNext()) {obj this.list.get(cursor);}return obj;} } 容器接口 public interface AggregationT {/*** 添加一个元素**/void add(T obj);/*** 移除一个元素**/void remove(T obj);/*** 获取容器的迭代器**/IteratorT iterator(); } 具体容器类 public class ConcreteAggregationT implements AggregationT{private ListT list new ArrayList();Overridepublic void add(T obj) {list.add(obj);}Overridepublic void remove(T obj) {list.remove(obj);}Overridepublic IteratorT iterator() {return new ConcreteIterator(list);} } 客户类 public class Client {public static void main(String args[]) {AggregationString a new ConcreteAggregation();a.add(a);a.add(b);a.add(c);IteratorString iterator a.iterator();while (iterator.hasNext()) {System.out.print(iterator.next());}} } 角色介绍 Iterator迭代器接口迭代器接口负责定义、访问和遍历元素的接口。ConcreteIterator具体迭代器类具体迭代器类的目的主要是实现迭代器接口并记录遍历的当前位置。Aggregate容器接口容器接口负责提供创建具体迭代器角色的接口。ConcreteAggregate具体容器类具体迭代器角色与该容器相关联。Client客户类。 五、简单实现 小民和小辉分别在公司的两个事业部某天老板安排任务让他们俩统计一下各自部门的员工数据这很好办嘛建一个类用数据结构把所有员工数据存进去即可老板要看的时候给他用for循环实现还是比较容易的下面就先为员工创建一个实体类 员工实体类 public class Employee {private String name;// 姓名private int age;// 年龄private String sex;// 性别private String position;// 职位public Employee(String name, int age, String sex, String position) {super();this.name name;this.age age;this.sex sex;this.position position;}// 简化代码省略setter和getter方法Overridepublic String toString() {return Employee{ name name \ , age age , sex sex , position position \ };} } 小民部门 public class CompanyMin {private ListEmployee list new ArrayList();public CompanyMin(){list.add(new Employee(小民, 26, 男, 程序猿));list.add(new Employee(小芸, 22, 女, 测试));list.add(new Employee(小方, 18, 女, 测试));list.add(new Employee(可儿, 21, 女, 设计));list.add(new Employee(朗情, 19, 女, 设计)); //吐槽一下为什么就小民一个男的小辉部门全男的。}public ListEmployee getEmployees(){return list;} } 小辉部门 public class CompanyHui {private Employee[] array new Employee[3];public CompanyHui(){array[0] new Employee(辉哥, 28, 男, 程序猿);array[1] new Employee(小红, 23, 男, 程序猿);array[2] new Employee(小辉, 25, 男, 程序猿);}public Employee[] getEmployees(){return array;} } 可见小民和小辉的内部实现是两种方式小民的人员信息容器的内部实质是使用的一个List类存储人员信息而小辉的实质上使用的是一个数组如果老板要查看人员信息就必须遍历两个容器 Boss查看 public class Boss {public static void main(String[] args) {CompanyHui hui new CompanyHui();Employee[] huiList hui.getEmployees();for(int i 0; i huiList.length; i){System.out.println(huiList[i]);}CompanyMin min new CompanyMin();List minList min.getEmployees();for(int i 0; i minList.size(); i){System.out.println(minList.get(i).toString());}} } 结果 Employee{name辉哥, age28, sex男, position程序猿} Employee{name小红, age23, sex男, position程序猿} Employee{name小辉, age25, sex男, position程序猿} Employee{name小民, age26, sex男, position程序猿} Employee{name小芸, age22, sex女, position测试} Employee{name小方, age18, sex女, position测试} Employee{name可儿, age21, sex女, position设计} Employee{name朗情, age19, sex女, position设计} 这样看似也没有问题但是如果有多个部门每个部门有各自的实现那么我们就要在Boss类中增加一遍遍历逻辑这样Boss类的功能会越来越多同时暴露了内部细节。那么我们需要定义一个迭代器接口 public interface Iterator {/*** 是否还有下一个元素 * * return true表示有false表示没有*/boolean hasNext();/*** 返回当前元素并将位置移至下一位*/Object next(); } 小民的迭代器 public class MinIterator implements Iterator{private ListEmployee list;private int position;public MinIterator(ListEmployee list){this.list list;}Overridepublic boolean hasNext() {return !(position list.size() - 1 || list.get(position) null);}Overridepublic Object next() {Employee e list.get(position);position;return e;}} 小辉的迭代器 public class HuiIterator implements Iterator{private Employee[] array;private int position;public HuiIterator(Employee[] array){this.array array;}Overridepublic boolean hasNext() {return !(position array.length - 1 || array[position] null);}Overridepublic Object next() {Employee e array[position];position;return e;}} 定义容器类的接口 public interface Company {/*** 返回一个迭代器对象* * return 迭代器对象*/Iterator iterator();} 修改一下之前的两个容器类 public class CompanyHui implements Company{private Employee[] array new Employee[3];public CompanyHui(){array[0] new Employee(辉哥, 28, 男, 程序猿);array[1] new Employee(小红, 23, 男, 程序猿);array[2] new Employee(小辉, 25, 男, 程序猿);}public Employee[] getEmployees(){return array;}Overridepublic Iterator iterator() {return new HuiIterator(array);} } public class CompanyMin implements Company{private ListEmployee list new ArrayList();public CompanyMin(){list.add(new Employee(小民, 26, 男, 程序猿));list.add(new Employee(小芸, 22, 女, 测试));list.add(new Employee(小方, 18, 女, 测试));list.add(new Employee(可儿, 21, 女, 设计));list.add(new Employee(朗情, 19, 女, 设计));}public ListEmployee getEmployees(){return list;}Overridepublic Iterator iterator() {return new MinIterator(list);} } Boss查看 public class Boss {public static void main(String[] args) {CompanyHui hui new CompanyHui();check(hui.iterator());CompanyMin min new CompanyMin();check(min.iterator());}private static void check(Iterator iterator){while (iterator.hasNext()) {System.out.println(iterator.next().toString());}} } 六、Android源码中的迭代器模式 1、Cursor 当我们使用SQLiteDatabase的query方法查询数据库时会返回一个Cursor游标对象该游标的实质就是一个具体的迭代器我们可以使用它来遍历数据库查询所得的结果集。 七、总结 迭代器模式发展至今几乎所有的高级语言都有相应的内置实现对于开发者而言已经极少会自己去实现迭代器了所以本章内容更多的是了解而非应用。 优点 符合面向对象设计原则中的单一职责原则。支持对容器对象的多种遍历。弱化了容器类与遍历算法之间的关系。 缺点 类文件的增加。会出现ConcurrentModificationException异常。遍历过程是一个单向且不可逆的遍历。
http://www.sadfv.cn/news/49052/

相关文章:

  • 百度网站好评贵州省建设厅造价通官方网站
  • 如何向搜索引擎提交网站网站 推广商系统 设计
  • 门户网站开发如何提高产品排名佛山网站免费制作
  • 写着网站建设图片网站做联盟还赚钱吗
  • 专题类响应式网站建设怎么样建设自己网站
  • 公司做网站的费属于广告费么国内做网站大公司
  • php做网站做的比较好的家具网站首页
  • 如何做黑彩网站网站开发与开发
  • 个人电子商务网站建设沈阳企业网站制作公司
  • 长春市做网站网站建设销售方面会遇到的问题
  • 网站流量大小对网站有什么影响免费商用图片的网站
  • 建设通网站是筑龙网的吗制作wordpress模板教程
  • 天河网站建设公司餐饮招商加盟网站建设
  • 产品推广网站设计中山seo扣费
  • 注册网站时手机号格式不正确分类达人介绍
  • 深圳微信网站建设报价湖北响应式网站制作
  • php做的卖水果网站建设网站的网址
  • 家庭电影网站建设百度小程序注册流程
  • php做网站时间代码小程序开店流程
  • 联系方式 响应式网站如何能去医疗网站做编辑
  • 邢台建网站找谁苏州我可以网络科技有限公司
  • 青岛海川建设集团网站电子商务网站开发的预期目标
  • 网红网站建设种子网站开发
  • 如何建设网站教程在aws上安装WordPress
  • 吴江住房城乡建设局网站chrome手机安卓版
  • 如何做网上私人彩票网站天津市建设厅注册中心网站
  • phpcms 安装官网的教程更换域名后网站图片还是无法显示网站开发不足之处
  • 安全狗 网站打不开免费网站安全软件大全免费下载安装
  • 在网站里怎么做图片超链接中小企业网上申报系统
  • wordpress做商城网站吗广州 电商网站建设