// 定义连接状态枚举
enum ConnectionState {
Disconnected,
Connecting,
Connected,
}
// 定义连接结构体
struct Connection {
state: ConnectionState,
}
// 定义连接状态机的行为
trait ConnectionStateMachine {
fn connect(&mut self);
fn disconnect(&mut self);
fn get_state_description(&self) -> &str;
}
// 为Connection实现ConnectionStateMachine特征
impl ConnectionStateMachine for Connection {
fn connect(&mut self) {
match self.state {
ConnectionState::Disconnected => {
self.state = ConnectionState::Connecting;
println!("正在连接...");
}
ConnectionState::Connecting => {
self.state = ConnectionState::Connected;
println!("已连接");
}
ConnectionState::Connected => {
println!("已经处于连接状态,无法重复连接");
}
}
}
fn disconnect(&mut self) {
match self.state {
ConnectionState::Connected => {
// 特定的断开流程,例如发送断开请求等
println!("正在执行断开流程...");
self.state = ConnectionState::Disconnected;
println!("已断开连接");
}
ConnectionState::Connecting => {
println!("连接中,无法断开");
}
ConnectionState::Disconnected => {
println!("已经处于断开状态,无法重复断开");
}
}
}
fn get_state_description(&self) -> &str {
match self.state {
ConnectionState::Disconnected => "断开连接",
ConnectionState::Connecting => "正在连接",
ConnectionState::Connected => "已连接",
}
}
}
fn main() {
let mut conn = Connection {
state: ConnectionState::Disconnected,
};
conn.connect();
conn.connect();
println!("当前状态描述: {}", conn.get_state_description());
conn.disconnect();
conn.disconnect();
}
代码说明
- 枚举定义:使用
enum
定义 ConnectionState
枚举,表示连接的三种状态。
- 结构体定义:
Connection
结构体包含一个 state
字段,类型为 ConnectionState
。
- 特征定义:
ConnectionStateMachine
特征定义了三个方法:connect
、disconnect
和 get_state_description
。
- 特征实现:为
Connection
结构体实现 ConnectionStateMachine
特征,在 connect
和 disconnect
方法中,通过 match
语句处理不同状态间的转换,并防止无效转换。get_state_description
方法返回当前状态的描述信息。
- 主函数:在
main
函数中创建 Connection
实例,并调用相关方法进行状态转换和获取状态描述。