实现状态模式示例,添加任务、状态及具体状态类,增强代码可读性
This commit is contained in:
parent
5ddda4ee95
commit
5fbbada4b7
|
|
@ -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("=========== 状态模式结束 ===========")
|
||||||
|
}
|
||||||
|
|
@ -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=========== 状态模式结束 ===========")
|
||||||
|
|
@ -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=========== 状态模式结束 ===========");
|
||||||
|
})();
|
||||||
Loading…
Reference in New Issue