1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

设计模式详解——迭代器模式

前言

今天我们要学习的这个设计模式,我们其实在日常开发中也经常用到,但也仅仅只是用过,所以很多时候我都不觉得它是一种设计模式,它就是迭代器模式,由于这个设计模式比较简单,所以关于它我们能讲的内容也不多,因此呢,今天的内容也就比较少。

迭代器模式

迭代器模式(Iterator Pattern)是 Java .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

迭代器模式提供了一种方法顺序,访问一个聚合对象中的各个元素,而又不暴露其内部具体实现细节

要点

  • 迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的实现细节
  • 把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所

应用

关于迭代器模式,用的最多的当然就是java容器部分的相关内容,比如Collection接口。这里我们通过一个简易的手写容器,来演示它具体的应用场景。

适配器接口

首先是迭代器的接口,它有两个方法,一个用于判断容器是否包含元素;另一个用于拿出容器中的当前角标最小的元素(默认为为0

public interface Iterator {
   boolean hasNext();
   Object next();
}
容器接口

然后是容器接口,容器接口只有一个方法,就是获取迭代器。

public interface Container {
   Iterator getIterator();
}
容器实现

容器的内部实现包括了迭代器的实现

public class SyskeContainer implements Container {
   public Object[] values = {"云中志" , "java" ,"志哥" , "syske"};
 
   @Override
   public Iterator getIterator() {
      return new SyskeIterator();
   }
 
   private class SyskeIterator implements Iterator {
 
      int index;
 
      @Override
      public boolean hasNext() {
         if(index < values.length){
            return true;
         }
         return false;
      }
 
      @Override
      public Object next() {
         if(this.hasNext()){
            return values[index++];
         }
         return null;
      }     
   }
}
测试代码

下面的测试代码也很简单,就是获取SyskeContainer的迭代器,然后通过它的迭代器,实现对SyskeContainer容器的遍历操作:

public class SyskeContainerTest extends TestCase {

    public void testIterator() {
        SyskeContainer syskeContainer = new SyskeContainer();
        Iterator iterator = syskeContainer.getIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

}

运行结果如下:

总结

从上面的内容以及我们的代码中其实可以看出来,相比于我们前面讲到的设计模式,迭代器的内容就显得比较少,而且比较简单,更重要的是,它的应用场景也很窄,基本上都是集中在批量操作的业务中,所起的作用就是代替具体的容器,实现遍历操作,然后实现具体容器与业务之间的耦合关系。

posted @ 2021-10-23 22:29  云中志  阅读(99)  评论(0编辑  收藏  举报