Java 建造者模式:轻松实现视频播放软件多显示模式
建造者模式是一种创建型设计模式,它允许你逐步构建复杂对象,而无需在同一个构造函数中包含大量参数。在这个例子中,我们将使用建造者模式来设计一个视频播放软件的不同显示模式。 1. 定义产品类(VideoPlayer) 首先,我们定义一个 `VideoPlayer` 类,它包含所有可能的界面组件。 ```java public class VideoPlayer { private boolean menu; private boolean playlist; private boolean mainWindow; private boolean controlBar; private boolean favoritesList; // 私有构造函数,防止外部直接实例化 private VideoPlayer(Builder builder) { this.menu = builder.menu; this.playlist = builder.playlist; this.mainWindow = builder.mainWindow; this.controlBar = builder.controlBar; this.favoritesList = builder.favoritesList; } // Getters for the components public boolean isMenu() { return menu; } public boolean isPlaylist() { return playlist; } public boolean isMainWindow() { return mainWindow; } public boolean isControlBar() { return controlBar; } public boolean isFavoritesList() { return favoritesList; } // 内部静态类 Builder public static class Builder { private boolean menu; private boolean playlist; private boolean mainWindow; private boolean controlBar; private boolean favoritesList; public Builder() {} public Builder withMenu(boolean menu) { this.menu = menu; return this; } public Builder withPlaylist(boolean playlist) { this.playlist = playlist; return this; } public Builder withMainWindow(boolean mainWindow) { this.mainWindow = mainWindow; return this; } public Builder withControlBar(boolean controlBar) { this.controlBar = controlBar; return this; } public Builder withFavoritesList(boolean favoritesList) { this.favoritesList = favoritesList; return this; } public VideoPlayer build() { return new VideoPlayer(this); } } @Override public String toString() { return "VideoPlayer{" + "menu=" + menu + ", playlist=" + playlist + ", mainWindow=" + mainWindow + ", controlBar=" + controlBar + ", favoritesList=" + favoritesList + '}'; } } ``` 2. 定义具体建造者(DisplayModes) 接下来,我们定义几个具体的建造者类,每个类对应一种显示模式。 ```java public class DisplayModes { public static VideoPlayer fullMode() { return new VideoPlayer.Builder() .withMenu(true) .withPlaylist(true) .withMainWindow(true) .withControlBar(true) .withFavoritesList(false) .build(); } public static VideoPlayer minimalMode() { return new VideoPlayer.Builder() .withMenu(false) .withPlaylist(false) .withMainWindow(true) .withControlBar(true) .withFavoritesList(false) .build(); } public static VideoPlayer memoryMode() { return new VideoPlayer.Builder() .withMenu(false) .withPlaylist(false) .withMainWindow(true) .withControlBar(true) .withFavoritesList(true) .build(); } public static VideoPlayer networkMode() { return new VideoPlayer.Builder() .withMenu(true) .withPlaylist(true) .withMainWindow(true) .withControlBar(true) .withFavoritesList(true) .build(); } } ``` 3. 使用建造者模式 我们在主程序中使用这些建造者来创建不同模式的视频播放器。 ```java public class Main { public static void main(String[] args) { VideoPlayer fullModePlayer = DisplayModes.fullMode(); System.out.println("Full Mode: " + fullModePlayer); VideoPlayer minimalModePlayer = DisplayModes.minimalMode(); System.out.println("Minimal Mode: " + minimalModePlayer); VideoPlayer memoryModePlayer = DisplayModes.memoryMode(); System.out.println("Memory Mode: " + memoryModePlayer); VideoPlayer networkModePlayer = DisplayModes.networkMode(); System.out.println("Network Mode: " + networkModePlayer); } } ``` 运行结果 运行上述代码,你将看到以下输出: ``` Full Mode: VideoPlayer{menu=true, playlist=true, mainWindow=true, controlBar=true, favoritesList=false} Minimal Mode: VideoPlayer{menu=false, playlist=false, mainWindow=true, controlBar=true, favoritesList=false} Memory Mode: VideoPlayer{menu=false, playlist=false, mainWindow=true, controlBar=true, favoritesList=true} Network Mode: VideoPlayer{menu=true, playlist=true, mainWindow=true, controlBar=true, favoritesList=true} ``` 通过这种方式,我们可以轻松地创建不同模式的视频播放器,而不需要在每个地方都重复相同的代码。这正是建造者模式的优势所在。 ######[AI写代码神器 | 1061点数解答 | 2024-11-15 20:37:40]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)436
- Java 继承实现:重温经典剪刀石头布游戏(字节豆包 | 451点数解答 | 2024-10-20 19:57:58)482
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)335
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1229
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)380
- 模式迁移思想下:Python 实现 CD 播放器播放管理全解析(字节豆包 | 639点数解答 | 2024-08-26 06:31:50)259
- 用C语言结合模式迁移思想,实现超实用CD播放器播放管理!(字节豆包 | 948点数解答 | 2024-08-26 06:35:41)253
- 模式迁移思想下:C语言实现CD播放器播放管理及开发注意要点(字节豆包 | 1141点数解答 | 2025-08-08 14:18:01)82
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)350
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)345
- 手把手教你搭建支持多媒体、带管理功能的简约网页聊天室! (GPT | 1100点数解答 | 2024-11-21 20:04:06)166
- 简约网页版聊天室框架:支持多媒体发送与多功能管理(GPT | 922点数解答 | 2024-11-21 20:16:52)158