From feaa733595d635bad82b37d5ff7ecd0e3342effa Mon Sep 17 00:00:00 2001 From: IvisTang Date: Sun, 4 Jan 2026 16:19:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=B4=A3=E4=BB=BB=E9=93=BE?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E7=A4=BA=E4=BE=8B=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BB=8F=E7=90=86=E7=B1=BB=E5=8F=8A=E7=9B=B8=E5=85=B3=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E5=A2=9E=E5=BC=BA=E4=BB=A3=E7=A0=81=E5=8F=AF?= =?UTF-8?q?=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go/chain_of_responsibility/main.go | 76 ++++++++++++++++++++++++ python/chain_of_responsibility/main.py | 63 ++++++++++++++++++++ ts/src/chain_of_responsibility/index.ts | 77 +++++++++++++++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 go/chain_of_responsibility/main.go create mode 100644 python/chain_of_responsibility/main.py create mode 100644 ts/src/chain_of_responsibility/index.ts diff --git a/go/chain_of_responsibility/main.go b/go/chain_of_responsibility/main.go new file mode 100644 index 0000000..b5842e1 --- /dev/null +++ b/go/chain_of_responsibility/main.go @@ -0,0 +1,76 @@ +package main + +import "fmt" + +/* +实例: +汤宝宝申请报销款,需要走产品经理、部门经理和总经理的审核~ +*/ + +type Manager struct { + name string + successor *Manager // successor表示下一级经理 + amount float64 +} + +func (m *Manager) SetSuccessor(successor *Manager) { + m.successor = successor + fmt.Printf("%s的下一级经理是%s\n", m.name, successor.name) +} + +func (m *Manager) SetAmountRight(amount float64) { + m.amount = amount + fmt.Printf("%s的报销权限是%.2f元\n", m.name, amount) +} + +func (m *Manager) HaveRight(amount float64) bool { + + if amount <= m.amount { + fmt.Printf("%s有权限审批%.2f元的报销请求\n", m.name, amount) + return true + } + fmt.Printf("%s没有权限审批%.2f元的报销请求\n", m.name, amount) + return false +} + +func (m *Manager) Approve(name string, amount float64) { + fmt.Printf("%s提交了一笔%.2f元的报销请求\n", name, amount) + if m.HaveRight(amount) { + fmt.Printf("%s审批通过了%s的报销请求,金额为%.2f元\n", m.name, name, amount) + } else if m.successor != nil { + fmt.Printf("%s将%s的报销请求上报给%s审批\n", m.name, name, m.successor.name) + m.successor.Approve(name, amount) + } else { + fmt.Printf("没有合适的经理审批%s的报销请求,金额为%.2f元\n", name, amount) + } +} + +func main() { + fmt.Println("========= 责任链模式 =========") + // 创建经理 + pm := &Manager{name: "产品经理"} + pm.SetAmountRight(1000) + + dm := &Manager{name: "部门经理"} + dm.SetAmountRight(5000) + + gm := &Manager{name: "总经理"} + gm.SetAmountRight(20000) + + // 设置责任链 + pm.SetSuccessor(dm) + dm.SetSuccessor(gm) + + // 提交报销请求 + fmt.Println("-----") + pm.Approve("汤宝宝", 800) + fmt.Println("-----") + pm.Approve("汤宝宝", 3000) + fmt.Println("-----") + pm.Approve("汤宝宝", 15000) + fmt.Println("-----") + pm.Approve("汤宝宝", 25000) + + fmt.Println() + fmt.Println("======= 责任链模式结束 =======") +} diff --git a/python/chain_of_responsibility/main.py b/python/chain_of_responsibility/main.py new file mode 100644 index 0000000..2e0570b --- /dev/null +++ b/python/chain_of_responsibility/main.py @@ -0,0 +1,63 @@ +""" +实例: +汤宝宝申请报销款,需要走产品经理、部门经理和总经理的审核~ +""" + +class Manager: + def __init__(self, name): + self.name = name + self.successor = None + self.amount = 0 + + def set_successor(self, manager: 'Manager'): + self.successor = manager + print(f"{self.name}的下一级经理是{manager.name}") + + def set_amount_right(self, amount: float): + self.amount = amount + print(f"{self.name}的报销权限是{amount:.2f}元") + + def have_right(self, amount: float) -> bool: + right = amount <= self.amount + if right: + print(f"{self.name}有权限审批{amount:.2f}元的报销请求") + else: + print(f"{self.name}没有权限审批{amount:.2f}元的报销请求") + return right + + def approve(self, name:str, amount: float): + print(f"{name}提交了一笔{amount:.2f}元的报销请求") + if self.have_right(amount): + print(f"{self.name}审批通过了{name}的报销请求,金额为{amount:.2f}元") + elif self.successor: + print(f"{self.name}将{name}的报销请求上报给{self.successor.name}审批") + self.successor.approve(name, amount) + else: + print(f"没有合适的经理审批{name}的报销请求,金额为{amount:.2f}元") + +if __name__ == "__main__": + print("========= 责任链模式 =========") + + # 创建经理 + pm = Manager("产品经理") + pm.set_amount_right(1000) + dm = Manager("部门经理") + dm.set_amount_right(5000) + gm = Manager("总经理") + gm.set_amount_right(20000) + + # 设置责任链 + pm.set_successor(dm) + dm.set_successor(gm) + + # 提交报销请求 + print("-----") + pm.approve("汤宝宝", 800) + print("-----") + pm.approve("汤宝宝", 3000) + print("-----") + pm.approve("汤宝宝", 15000) + print("-----") + pm.approve("汤宝宝", 25000) + + print("\n======= 责任链模式结束 =======") \ No newline at end of file diff --git a/ts/src/chain_of_responsibility/index.ts b/ts/src/chain_of_responsibility/index.ts new file mode 100644 index 0000000..08e180a --- /dev/null +++ b/ts/src/chain_of_responsibility/index.ts @@ -0,0 +1,77 @@ +/* +实例: +汤宝宝申请报销款,需要走产品经理、部门经理和总经理的审核~ +*/ + +class Manager { + protected successor: Manager | null = null; + protected name: string; + protected amount: number = 0; + + constructor(name: string) { + this.name = name; + } + + setSuccessor(successor: Manager) { + this.successor = successor; + console.log(`${this.name}的下一级经理是${successor.name}`); + } + + setAmountRight(amount: number) { + this.amount = amount; + console.log(`${this.name}的报销权限是${amount.toFixed(2)}元`); + } + + haveRight(amount: number): boolean { + const right = amount <= this.amount; + if (right) { + console.log(`${this.name}有权限审批${amount.toFixed(2)}元的报销请求`); + } else { + console.log(`${this.name}没有权限审批${amount.toFixed(2)}元的报销请求`); + } + return right; + } + + approve(name: string, amount: number) { + console.log(`${name}提交了一笔${amount.toFixed(2)}元的报销请求`); + if (this.haveRight(amount)) { + console.log(`${this.name}审批通过了${name}的报销请求,金额为${amount.toFixed(2)}元`); + } else if (this.successor) { + console.log(`${this.name}将${name}的报销请求上报给${this.successor.name}审批`); + this.successor.approve(name, amount); + } else { + console.log(`没有合适的经理审批${name}的报销请求,金额为${amount.toFixed(2)}元`); + } + } +} + +(function(){ + console.log("========= 责任链模式 ========="); + + // 创建经理 + const pm = new Manager("产品经理"); + pm.setAmountRight(1000); + + const dm = new Manager("部门经理"); + dm.setAmountRight(5000); + + const gm = new Manager("总经理"); + gm.setAmountRight(20000); + + // 设置责任链 + pm.setSuccessor(dm); + dm.setSuccessor(gm); + + // 提交报销请求 + console.log("-----"); + pm.approve("汤宝宝", 800); + console.log("-----"); + pm.approve("汤宝宝", 3000); + console.log("-----"); + pm.approve("汤宝宝", 15000); + console.log("-----"); + pm.approve("汤宝宝", 25000); + + console.log("\n======= 责任链模式结束 ======="); + +})(); \ No newline at end of file