Java 运用命令模式开发 Windows 平台公告板系统,降低类耦合度!
为了实现这个功能,我们可以采用命令模式来降低 `MenuItem` 类与 `BoardScreen` 类之间的耦合度。下面是一个简单的实现示例: ### 1. 定义命令接口 ```java public interface Command { void execute(); } ``` ### 2. 实现具体命令类 ```java public class OpenCommand implements Command { private BoardScreen boardScreen; public OpenCommand(BoardScreen boardScreen) { this.boardScreen = boardScreen; } @Override public void execute() { boardScreen.open(); } } public class CreateCommand implements Command { private BoardScreen boardScreen; public CreateCommand(BoardScreen boardScreen) { this.boardScreen = boardScreen; } @Override public void execute() { boardScreen.create(); } } public class EditCommand implements Command { private BoardScreen boardScreen; public EditCommand(BoardScreen boardScreen) { this.boardScreen = boardScreen; } @Override public void execute() { boardScreen.edit(); } } ``` ### 3. 实现菜单项类 ```java public class MenuItem { private String name; private Command command; public MenuItem(String name, Command command) { this.name = name; this.command = command; } public void click() { command.execute(); } } ``` ### 4. 实现菜单类 ```java import java.util.ArrayList; import java.util.List; public class Menu { private List<MenuItem> menuItems = new ArrayList<>(); public void addMenuItem(MenuItem menuItem) { menuItems.add(menuItem); } public void clickMenuItem(int index) { if (index >= 0 && index < menuItems.size()) { menuItems.get(index).click(); } else { System.out.println("无效的菜单项索引"); } } } ``` ### 5. 实现公告板系统界面类 ```java public class BoardScreen { public void open() { System.out.println("打开公告板"); } public void create() { System.out.println("创建新的公告"); } public void edit() { System.out.println("编辑公告"); } } ``` ### 6. 测试类 ```java public class Main { public static void main(String[] args) { BoardScreen boardScreen = new BoardScreen(); Command openCommand = new OpenCommand(boardScreen); Command createCommand = new CreateCommand(boardScreen); Command editCommand = new EditCommand(boardScreen); Menu menu = new Menu(); menu.addMenuItem(new MenuItem("打开", openCommand)); menu.addMenuItem(new MenuItem("新建", createCommand)); menu.addMenuItem(new MenuItem("编辑", editCommand)); // 模拟用户点击菜单项 menu.clickMenuItem(0); // 打开公告板 menu.clickMenuItem(1); // 创建新的公告 menu.clickMenuItem(2); // 编辑公告 } } ``` ### 需要注意的逻辑点 1. **命令对象的生命周期管理**:确保每个命令对象在不再需要时被正确释放,避免内存泄漏。 2. **错误处理**:在 `Menu` 类的 `clickMenuItem` 方法中添加更多的错误处理逻辑,例如处理负数索引或超出范围的索引。 3. **扩展性**:如果未来需要增加更多的命令,可以考虑使用工厂模式或策略模式来管理和创建命令对象,提高代码的可维护性和扩展性。 ######[AI写代码神器 | 753点数解答 | 2024-11-30 14:19:04]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)407
- MATLAB填空题大揭秘:答案全知晓,掌握这些要点!(字节豆包 | 360点数解答 | 2025-12-26 08:41:25)35
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)308
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1139
- 复杂 SQL 查询:深度剖析订单、销量、销售额的环比与同比数据(讯飞星火 | 1757点数解答 | 2025-03-31 17:37:22)145
- Photoshop 错误 8800 大揭秘:原因分析与实用解决方案(DeepSeek | 349点数解答 | 2025-02-28 11:19:16)572
- Photoshop“去色”功能报错8800?原因及解决办法大揭秘!(字节豆包 | 167点数解答 | 2025-03-02 22:29:23)438
- Windows 系统下按键精灵:绑定窗口实现鼠标左键点击及开发注意要点(DeepSeek | 126点数解答 | 2025-08-24 23:48:27)139
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)320
- Java 实现仿 Windows 资源管理器:文件管理器功能全解析与代码示例(字节豆包 | 623点数解答 | 2025-01-01 14:59:04)248
- 深度剖析:黑盒、白盒、单元、集成、系统与验收测试的区别与联系 (百度文心 | 424点数解答 | 2023-11-09 18:24:11)299
- Spring Boot 打造 MallShop 购物商城:多角色权限、全业务功能的 Web 应用奇迹 (GPT | 1095点数解答 | 2024-12-09 14:06:47)367