1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| package _case
import "fmt"
type Handler interface { SetNext(h Handler) Handler Handle(user string, amount int64) }
type ProjectManager struct { next Handler }
func (pm *ProjectManager) Handle(user string, amount int64) { if amount <= 500 { fmt.Printf("%s 申请聚餐费用%d元,项目经理批准通过\n", user, amount) return } pm.next.Handle(user, amount) } func (pm *ProjectManager) SetNext(h Handler) Handler { pm.next = h return h }
type DepartmentManager struct { next Handler }
func (dm *DepartmentManager) Handle(user string, amount int64) { if amount > 500 && amount <= 1000 { fmt.Printf("%s 申请聚餐费用%d元,部门经理批准通过\n", user, amount) return } else if amount > 1000 { fmt.Printf("%s 申请聚餐费用%d元,部门经理批准通过\n", user, amount) dm.next.Handle(user, amount) } else { dm.next.Handle(user, amount) } } func (dm *DepartmentManager) SetNext(h Handler) Handler { dm.next = h return h }
type GeneralManager struct { next Handler }
func (gm *GeneralManager) Handle(user string, amount int64) { if amount > 1000 { fmt.Printf("%s 申请聚餐费用%d元,总经理批准通过\n", user, amount) return } gm.next.Handle(user, amount) } func (gm *GeneralManager) SetNext(h Handler) Handler { gm.next = h return h }
func DutyCase() { pm := &ProjectManager{} dm := &DepartmentManager{} gm := &GeneralManager{} pm.SetNext(dm).SetNext(gm) pm.Handle("张三", 300) pm.Handle("李四", 800) pm.Handle("王五", 1580) }
|