1
0
Fork 0

实现状态模式示例,添加任务、状态及具体状态类,增强代码可读性

This commit is contained in:
IvisTang 2026-01-07 10:03:18 +08:00
parent 5ddda4ee95
commit 5fbbada4b7
3 changed files with 167 additions and 0 deletions

61
go/state/main.go Normal file
View File

@ -0,0 +1,61 @@
package main
import "fmt"
/*
实例
一个任务状态机
*/
type Task struct {
state State
}
func (t *Task) SetState(state State) {
t.state = state
}
func (t *Task) Handle() {
t.state.Handle(t)
}
// 状态接口
type State interface {
Handle(t *Task)
}
// 具体状态 - 待处理
type PendingState struct{}
func (p *PendingState) Handle(t *Task) {
fmt.Println("任务待处理,开始处理任务...")
t.SetState(&InProgressState{})
}
// 具体状态 - 进行中
type InProgressState struct{}
func (i *InProgressState) Handle(t *Task) {
fmt.Println("任务处理中,完成任务...")
t.SetState(&CompletedState{})
}
// 具体状态 - 已完成
type CompletedState struct{}
func (c *CompletedState) Handle(t *Task) {
fmt.Println("任务已完成,无法再处理。")
}
func main() {
fmt.Println("============= 状态模式 =============")
task := &Task{state: &PendingState{}}
task.Handle()
task.Handle()
task.Handle()
fmt.Println()
fmt.Println("=========== 状态模式结束 ===========")
}

49
python/state/main.py Normal file
View File

@ -0,0 +1,49 @@
"""
实例
一个任务状态机
"""
from abc import ABC, abstractmethod
class Task:
state: 'State'
def __init__(self):
self.set_state(PendingState())
def set_state(self, state: 'State'):
self.state = state
def handle(self):
self.state.handle(self)
# 状态接口
class State(ABC):
@abstractmethod
def handle(self, context):
pass
# 具体状态 - 待处理
class PendingState(State):
def handle(self, context):
print("任务待处理,开始处理任务...")
context.set_state(InProgressState())
# 具体状态 - 处理中
class InProgressState(State):
def handle(self, context):
print("任务处理中,完成任务...")
context.set_state(CompletedState())
# 具体状态 - 已完成
class CompletedState(State):
def handle(self, context):
print("任务已完成,无法再处理。")
if __name__ == "__main__":
print("============= 状态模式 =============")
task = Task()
task.handle()
task.handle()
task.handle()
print("\n=========== 状态模式结束 ===========")

57
ts/src/state/index.ts Normal file
View File

@ -0,0 +1,57 @@
/*
*/
class Task {
state: State;
constructor() {
this.state = new PendingState();
}
setState(state: State) {
this.state = state;
}
handle() {
this.state.handle(this);
}
}
// 状态接口
interface State {
handle(task: Task): void;
}
// 具体状态 - 待处理
class PendingState implements State {
handle(task: Task): void {
console.log("任务待处理,开始处理任务...");
task.setState(new InProgressState());
}
}
// 具体状态 - 进行中
class InProgressState implements State {
handle(task: Task): void {
console.log("任务进行中,完成任务...");
task.setState(new CompletedState());
}
}
// 具体状态 - 已完成
class CompletedState implements State {
handle(task: Task): void {
console.log("任务已完成,无法再处理。");
}
}
(function () {
console.log("============= 状态模式 =============");
const task = new Task();
task.handle();
task.handle();
task.handle();
console.log("\n=========== 状态模式结束 ===========");
})();