音乐播放器应用程序的低级设计
设计音乐播放器应用程序需要仔细规划和构建组件,以确保无缝、高效的用户体验。
音乐播放器的关键要求
系统设计概述
音乐播放器应用程序可以分为以下几个组件:
让我们看看每个组件的底层设计和实现。
1. 歌曲课
“Song”类代表带有元数据的单个音乐曲目。
public class Song { private String id; private String title; private String artist; private String album; private double duration; // in seconds public Song(String id, String title, String artist, String album, double duration) { this.id = id; this.title = title; this.artist = artist; this.album = album; this.duration = duration; } // Getters and setters public String getId() { return id; } public String getTitle() { return title; } public String getArtist() { return artist; } public String getAlbum() { return album; } public double getDuration() { return duration; } }
2. 播放列表类
`Playlist` 类管理歌曲集合。它允许添加、删除和获取歌曲。
import java.util.ArrayList; import java.util.List; public class Playlist { private String name; private Listsongs; public Playlist(String name) { this.name = name; this.songs = new ArrayList<>(); } public void addSong(Song song) { songs.add(song); } public void removeSong(Song song) { songs.remove(song); } public List getSongs() { return songs; } public String getName() { return name; } }
3. MusicPlayer 类
`MusicPlayer` 类处理播放、暂停、停止和音量控制等播放功能。
public class MusicPlayer { private Song currentSong; private boolean isPlaying; public void play(Song song) { this.currentSong = song; this.isPlaying = true; System.out.println("Playing: " + song.getTitle() + " by " + song.getArtist()); } public void pause() { if (isPlaying) { isPlaying = false; System.out.println("Paused: " + currentSong.getTitle()); } else { System.out.println("No song is currently playing."); } } public void stop() { if (currentSong != null) { System.out.println("Stopped: " + currentSong.getTitle()); currentSong = null; isPlaying = false; } else { System.out.println("No song is currently playing."); } } public void resume() { if (currentSong != null && !isPlaying) { isPlaying = true; System.out.println("Resumed: " + currentSong.getTitle()); } else { System.out.println("No song to resume."); } } }
4. SearchService 类
`SearchService` 类允许用户按标题、艺术家或专辑搜索歌曲。
import java.util.ArrayList; import java.util.List; public class SearchService { private Listsongs; public SearchService(List songs) { this.songs = songs; } public List searchByTitle(String title) { List results = new ArrayList<>(); for (Song song : songs) { if (song.getTitle().equalsIgnoreCase(title)) { results.add(song); } } return results; } public List searchByArtist(String artist) { List results = new ArrayList<>(); for (Song song : songs) { if (song.getArtist().equalsIgnoreCase(artist)) { results.add(song); } } return results; } public List searchByAlbum(String album) { List results = new ArrayList<>(); for (Song song : songs) { if (song.getAlbum().equalsIgnoreCase(album)) { results.add(song); } } return results; } }
5. StorageService 类
`StorageService` 类模拟从本地存储读取歌曲。
import java.util.ArrayList; import java.util.List; public class StorageService { public static ListloadSongs() { List songs = new ArrayList<>(); songs.add(new Song("1", "Shape of You", "Ed Sheeran", "Divide", 240)); songs.add(new Song("2", "Blinding Lights", "The Weeknd", "After Hours", 200)); songs.add(new Song("3", "Levitating", "Dua Lipa", "Future Nostalgia", 220)); return songs; } }
示例用法
import java.util.List; public class Main { public static void main(String[] args) { // Load songs from storage Listsongs = StorageService.loadSongs(); // Search service SearchService searchService = new SearchService(songs); List results = searchService.searchByArtist("Ed Sheeran"); System.out.println("Songs by Ed Sheeran:"); for (Song song : results) { System.out.println(song.getTitle()); } // Play a song MusicPlayer musicPlayer = new MusicPlayer(); musicPlayer.play(songs.get(0)); musicPlayer.pause(); musicPlayer.resume(); musicPlayer.stop(); // Create a playlist Playlist playlist = new Playlist("Favorites"); playlist.addSong(songs.get(1)); playlist.addSong(songs.get(2)); System.out.println("Playlist: " + playlist.getName()); for (Song song : playlist.getSongs()) { System.out.println(song.getTitle()); } } }