实现责任链模式示例,添加经理类及相关方法,增强代码可读性
This commit is contained in:
parent
9bb30b8bfb
commit
feaa733595
|
|
@ -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("======= 责任链模式结束 =======")
|
||||||
|
}
|
||||||
|
|
@ -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======= 责任链模式结束 =======")
|
||||||
|
|
@ -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======= 责任链模式结束 =======");
|
||||||
|
|
||||||
|
})();
|
||||||
Loading…
Reference in New Issue