音乐播放器应用程序的低级设计
设计音乐播放器应用程序需要仔细规划和构建组件,以确保无缝、高效的用户体验。
音乐播放器的关键要求
系统设计概述
音乐播放器应用程序可以分为以下几个组件:
让我们看看每个组件的底层设计和实现。
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 List songs;
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 List songs;
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 List loadSongs() {
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
List songs = 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());
}
}
}