迭代器模式实例
时间: 2023-07-05 22:22:30 浏览: 67
迭代器模式是一种行为型设计模式,它允许客户端通过统一的接口遍历集合对象中的元素,而无需关心集合内部实现细节。下面是一个迭代器模式的示例。
假设我们有一个音乐播放器应用程序,它可以播放不同类型的音乐文件,包括 MP3、WAV、FLAC 等。我们需要实现一个播放列表,用于存储和管理播放列表中的音乐文件。我们可以使用迭代器模式来遍历播放列表中的音乐文件。
首先我们需要定义一个接口,用于定义迭代器对象的方法:
```java
public interface Iterator<T> {
public boolean hasNext();
public T next();
}
```
然后我们需要定义一个集合类,用于存储和管理音乐文件:
```java
public class MusicPlaylist<T> implements Iterable<T> {
private List<T> songs = new ArrayList<>();
public void addSong(T song) {
songs.add(song);
}
@Override
public Iterator<T> iterator() {
return new MusicPlaylistIterator();
}
private class MusicPlaylistIterator implements Iterator<T> {
private int currentIndex = 0;
@Override
public boolean hasNext() {
return currentIndex < songs.size();
}
@Override
public T next() {
T song = songs.get(currentIndex);
currentIndex++;
return song;
}
}
}
```
在上面的代码中,我们定义了一个 MusicPlaylist 类,它实现了 Iterable 接口,并且在其内部实现了一个 MusicPlaylistIterator 类,用于实现迭代器对象的具体逻辑。
最后,我们可以使用 MusicPlaylist 类来创建播放列表,并使用迭代器来遍历播放列表中的音乐文件:
```java
MusicPlaylist<String> playlist = new MusicPlaylist<>();
playlist.addSong("song1.mp3");
playlist.addSong("song2.wav");
playlist.addSong("song3.flac");
Iterator<String> iterator = playlist.iterator();
while (iterator.hasNext()) {
String song = iterator.next();
System.out.println("Playing " + song);
}
```
上面的代码会输出以下内容:
```
Playing song1.mp3
Playing song2.wav
Playing song3.flac
```
通过使用迭代器模式,我们可以很方便地遍历播放列表中的音乐文件,而无需关心集合对象的具体实现。