实现状态模式示例,添加任务、状态及具体状态类,增强代码可读性
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