Java 状态模式:模拟 TCP 连接多种状态及行为转换
```java // TCPConnectionState 接口定义了TCP连接状态的行为 interface TCPConnectionState { void open(); // 建立连接 void close(); // 关闭连接 void listen(); // 监听连接 } // EstablishedState 表示TCP连接已建立状态 class EstablishedState implements TCPConnectionState { @Override public void open() { System.out.println("Connection is already established."); } @Override public void close() { System.out.println("Closing the connection."); } @Override public void listen() { System.out.println("Connection is established and listening for data."); } } // ListeningState 表示TCP连接正在监听状态 class ListeningState implements TCPConnectionState { @Override public void open() { System.out.println("Connection is already listening."); } @Override public void close() { System.out.println("Closing the connection."); } @Override public void listen() { System.out.println("Connection is already listening."); } } // ClosedState 表示TCP连接已关闭状态 class ClosedState implements TCPConnectionState { @Override public void open() { System.out.println("Connection is closed. Cannot open a closed connection."); } @Override public void close() { System.out.println("Connection is already closed."); } @Override public void listen() { System.out.println("Connection is closed. Cannot listen on a closed connection."); } } // TCPConnection 类代表TCP连接对象 class TCPConnection { private TCPConnectionState state; // 初始状态为已关闭 public TCPConnection() { this.state = new ClosedState(); } public void setState(TCPConnectionState state) { this.state = state; } // 建立连接 public void open() { state.open(); } // 关闭连接 public void close() { state.close(); } // 监听连接 public void listen() { state.listen(); } } // 测试类 public class Main { public static void main(String[] args) { TCPConnection connection = new TCPConnection(); // 初始状态为已关闭 connection.open(); // Connection is already established. connection.setState(new EstablishedState()); // 切换到已建立状态 connection.open(); // Connection is already established. connection.listen(); // Connection is established and listening for data. connection.setState(new ListeningState()); // 切换到监听状态 connection.listen(); // Connection is already listening. connection.setState(new ClosedState()); // 切换到关闭状态 connection.close(); // Connection is already closed. connection.listen(); // Connection is closed. Cannot listen on a closed connection. } } ``` 额外注意的地方: 1. 状态模式中的每个状态类都实现了 `TCPConnectionState` 接口,确保了不同状态下有不同的行为。 2. 在 `TCPConnection` 类中,通过 `setState` 方法可以动态改变连接对象的状态,实现了状态的转换。 3. 测试类 `Main` 中展示了连接对象在不同状态下的行为表现,验证了状态模式的有效性。 ######[AI写代码神器 | 2147点数解答 | 2024-12-19 22:19:37]
- C++ 实现随机数去重与排序,助力新手解决问卷调查选号难题(字节豆包 | 480点数解答 | 2026-02-25 16:42:48)19
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)405
- Java 状态模式:模拟 TCP 连接多种状态及行为转换(GPT | 2147点数解答 | 2024-12-19 22:19:37)290
- Java实现状态模式:模拟TCP连接状态管理及行为处理(GPT | 1541点数解答 | 2024-12-19 22:19:57)277
- 转盘转动判定:C++实现力量值总和计算(DeepSeek | 199点数解答 | 2026-02-27 20:06:59)11
- C++ 实现根据力量值判断转盘能否转动(字节豆包 | 295点数解答 | 2026-03-14 20:31:22)7
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)305
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1134
- 超详细:使用Java 8创建连接MySQL数据库的Spring Boot项目全步骤( | 1491点数解答 | 2024-05-13 16:25:58)260
- IDEA搭建 Java 8 连接 MySQL 的 Spring Boot 项目全流程:从创建到测试( | 1985点数解答 | 2024-05-13 16:26:16)304
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)317
- 高考毕业晚会难题:从学生能力值求最大默契程度的Python解法(字节豆包 | 487点数解答 | 2026-01-24 13:10:18)40