1- // 职责链模式(Chain of Responsibility Pattern)
1+ // 职责链模式(Chain of Responsibility Pattern)
2+
3+ // 采购请求
4+ let PurchaseRequest = ( amount , productName ) => {
5+ this . amount = amount
6+ this . productName = productName
7+ }
8+
9+ // 处理方
10+ let Approver = ( name , nextApprover ) => {
11+ this . name = name
12+ this . nextApprover = nextApprover
13+ }
14+
15+ Approver . prototype . processRequest = ( ) => {
16+ throw new Error ( )
17+ }
18+
19+ // ConcreteHandler
20+ let Manager = ( name , nextApprover ) => {
21+ Approver . call ( this , name , nextApprover )
22+ }
23+ extend ( Manager , Approver )
24+ Manager . prototype . processRequest = ( request ) => {
25+ if ( request . Amount < 10000.0 ) {
26+ console . log ( 'ok' )
27+ } else if ( NextApprover != null ) {
28+ this . nextApprover . ProcessRequest ( request )
29+ }
30+ }
31+
32+
33+ // ConcreteHandler,副总
34+ let VicePresident = function ( name , nextApprover ) {
35+ Approver . call ( this , name , nextApprover )
36+ }
37+ extend ( VicePresident , Approver ) ;
38+ VicePresident . prototype . processRequest = function ( request ) {
39+ if ( request . Amount < 25000.0 ) {
40+ console . log ( 'ok' ) ;
41+ } else if ( NextApprover != null ) {
42+ this . nextApprover . ProcessRequest ( request )
43+ }
44+ }
45+
46+
47+ // ConcreteHandler,总经理
48+ let President = function ( name , nextApprover ) {
49+ Approver . call ( this , name , nextApprover )
50+ }
51+ extend ( President , Approver )
52+ President . prototype . processRequest = function ( request ) {
53+ if ( request . Amount < 100000.0 ) {
54+ console . log ( 'ok' )
55+ } else if ( NextApprover != null ) {
56+ this . nextApprover . ProcessRequest ( request )
57+ }
58+ }
59+
60+
61+ let requestTelphone = new PurchaseRequest ( 4000.0 , "Telphone" )
62+ let requestSoftware = new PurchaseRequest ( 10000.0 , "Visual Studio" )
63+ let requestComputers = new PurchaseRequest ( 40000.0 , "Computers" )
64+
65+ let manager = new Manager ( "LearningHard" )
66+ let Vp = new VicePresident ( "Tony" )
67+ let Pre = new President ( "BossTom" )
68+
69+ // 设置责任链
70+ manager . NextApprover = Vp
71+ Vp . NextApprover = Pre
72+
73+ // 处理请求
74+ manager . ProcessRequest ( requestTelphone )
75+ manager . ProcessRequest ( requestSoftware )
76+ manager . ProcessRequest ( requestComputers )
0 commit comments