• 设计模式一迭代器模式


    迭代器(Iterator)模式的定义
      提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
      迭代器模式是一种对象行为型模式,

      在客户访问类与聚合类之间插入一个迭代器,这分离了聚合对象与其遍历行为,对客户也隐藏了其内部细节

    抽象聚合(Aggregate)角色:
      定义存储、添加、删除聚合对象以及创建迭代器对象的接口。
    具体聚合(ConcreteAggregate)角色:
      实现抽象聚合类,返回一个具体迭代器的实例。
    抽象迭代器(Iterator)角色:
      定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。
    具体迭代器(Concretelterator)角色:
      实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。
     1 public class Iterator {
     2     public static void main(String[] args) {
     3         ConcreteAggregate a = new ConcreteAggregate();
     4         a.add(1);
     5         a.add("小花");
     6         a.add(1.1);
     7         a.remove(1);
     8         Iteratoring iterator = a.getIterator();
     9         while (iterator.hasNext()) {
    10             System.out.println(iterator.next());
    11         }
    12     }
    13 }
    14 
    15 // 抽象迭代器
    16 interface Iteratoring {
    17     public boolean hasNext();
    18 
    19     public Object next();
    20 }
    21 
    22 //具体迭代器
    23 class Concretelterator implements Iteratoring {
    24 
    25     private ArrayList<Object> li;
    26 
    27     public Concretelterator(ArrayList<Object> li) {
    28         this.li = li;
    29     }
    30 
    31     int count = 0;
    32 
    33     @Override
    34     public boolean hasNext() {
    35         if (count < li.size()) {
    36             return true;
    37         }
    38         return false;
    39     }
    40 
    41     @Override
    42     public Object next() {
    43         if (hasNext()) {
    44             return li.get(count++);
    45         }
    46         return null;
    47     }
    48 }
    49 
    50 //抽象聚合
    51 interface Aggregate {
    52     public void add(Object obj);
    53 
    54     public void remove(Object obj);
    55 
    56     public Iteratoring getIterator();
    57 }
    58 
    59 //具体聚合
    60 class ConcreteAggregate implements Aggregate {
    61 
    62     private ArrayList arr = new ArrayList();
    63 
    64     @Override
    65     public void add(Object obj) {
    66         arr.add(obj);
    67     }
    68 
    69     @Override
    70     public void remove(Object obj) {
    71         arr.remove(obj);
    72     }
    73 
    74     @Override
    75     public Iteratoring getIterator() {
    76         return new Concretelterator(arr);
    77     }
    78 }
  • 相关阅读:
    Scss支持多主题切换的方案实现
    一探前端开发中的JS调试技巧
    【基础】CSS居中的15种方式
    代码打开输入法的手写功能
    谷歌使用navigator.mediaDevices.getUserMedia 调用摄像头拍照功能,不兼容IE
    VUE中使用canvas做签名功能,兼容IE
    vue项目放在IE上页面空白的问题
    element-ui中使用el-radio单选切换表格
    vue中使用canvas绘制签名
    简单使用vuex状态管理
  • 原文地址:https://www.cnblogs.com/loveer/p/11279526.html
Copyright © 2020-2023  润新知