1
+ < script >
2
+ var order = function ( orderType , pay , stock ) {
3
+ if ( orderType === 1 ) { // 500 元定金购买模式
4
+ if ( pay == true ) {
5
+ console . log ( '500 元定金预购, 得到100 优惠券' ) ;
6
+ } else {
7
+ if ( stock > 0 ) {
8
+ console . log ( '普通购买,无优惠券' ) ;
9
+ } else {
10
+ console . log ( '手机库存不足' ) ;
11
+ }
12
+ }
13
+ }
14
+ else if ( orderType === 2 ) { // 200 元定金购买模式
15
+ if ( pay === true ) {
16
+ console . log ( '200 元定金预购, 得到50 优惠券' ) ;
17
+ } else {
18
+ if ( stock > 0 ) {
19
+ console . log ( '普通购买,无优惠券' ) ;
20
+ } else {
21
+ console . log ( '手机库存不足' ) ;
22
+ }
23
+ }
24
+ }
25
+ else if ( orderType === 3 ) { //普通购买
26
+ if ( stock > 0 ) {
27
+ console . log ( '普通购买,无优惠券' ) ;
28
+ } else {
29
+ console . log ( '手机库存不足' ) ;
30
+ }
31
+ }
32
+ } ;
33
+ order ( 1 , true , 500 ) ; // 输出: 500 元定金预购, 得到100 优惠券
34
+ </ script >
35
+
36
+ < script >
37
+ var order500 = function ( orderType , pay , stock ) {
38
+ if ( orderType === 1 && pay === true ) {
39
+ console . log ( '500 元定金预购, 得到100 优惠券' ) ;
40
+ } else {
41
+ order200 ( orderType , pay , stock ) ;
42
+ }
43
+ } ;
44
+
45
+ // 200 元订单
46
+ var order200 = function ( orderType , pay , stock ) {
47
+ if ( orderType === 2 && pay === true ) {
48
+ console . log ( '200 元定金预购, 得到50 优惠券' ) ;
49
+ } else {
50
+ orderNormal ( orderType , pay , stock ) ;
51
+ }
52
+ } ;
53
+
54
+ // 普通购买订单
55
+ var orderNormal = function ( orderType , pay , stock ) {
56
+ if ( stock > 0 ) {
57
+ console . log ( '普通购买,无优惠券' ) ;
58
+ } else {
59
+ console . log ( '手机库存不足' ) ;
60
+ }
61
+ } ;
62
+
63
+ //测试结果
64
+ order500 ( 1 , true , 500 ) ; // 输出:500 元定金预购, 得到100 优惠券
65
+ order500 ( 2 , true , 500 ) ; // 输出:200 元定金预购, 得到500 优惠券
66
+ order500 ( 3 , false , 500 ) ; // 输出:普通购买, 无优惠券
67
+ order500 ( 3 , false , 0 ) ; // 输出:手机库存不足
68
+ </ script >
69
+
70
+ < script >
71
+ var Order500 = function ( orderType , pay , stock ) {
72
+ if ( orderType === 1 && pay === true ) {
73
+ console . log ( '500 元定金预购,得到100 优惠券' ) ;
74
+ } else {
75
+ return 'nextSuccessor' ;
76
+ }
77
+ } ;
78
+
79
+ var Order200 = function ( orderType , pay , stock ) {
80
+ if ( orderType === 2 && pay === true ) {
81
+ console . log ( '200 元定金预购,得到50 优惠券' ) ;
82
+ } else {
83
+ return 'nextSuccessor' ;
84
+ }
85
+ } ;
86
+
87
+ var OrderNormal = function ( orderType , pay , stock ) {
88
+ if ( stock > 0 ) {
89
+ console . log ( '普通购买,无优惠券' ) ;
90
+ } else {
91
+ console . log ( '手机库存不足' ) ;
92
+ }
93
+ } ;
94
+
95
+ // Chain.prototype.setNextSuccessor 指定在链中的下一个节点
96
+ // Chain.prototype.passRequest 传递请求给某个节点
97
+ var Chain = function ( fn ) {
98
+ this . fn = fn ;
99
+ this . successor = null ;
100
+ } ;
101
+
102
+ Chain . prototype . setNextSuccessor = function ( successor ) {
103
+ return this . successor = successor ;
104
+ } ;
105
+ Chain . prototype . passRequest = function ( ) {
106
+ var ret = this . fn . apply ( this , arguments ) ;
107
+ if ( ret === 'nextSuccessor' ) {
108
+ return this . successor && this . successor . passRequest . apply ( this . successor , arguments ) ;
109
+ }
110
+ return ret ;
111
+ } ;
112
+
113
+ var chainOrder500 = new Chain ( Order500 ) ;
114
+ var chainOrder200 = new Chain ( Order200 ) ;
115
+ var chainOrderNormal = new Chain ( OrderNormal ) ;
116
+
117
+ chainOrder500 . setNextSuccessor ( chainOrder200 ) ;
118
+ chainOrder200 . setNextSuccessor ( chainOrderNormal ) ;
119
+ chainOrder500 . passRequest ( 1 , true , 500 ) ; // 输出:500 元定金预购,得到100 优惠券
120
+ chainOrder500 . passRequest ( 2 , true , 500 ) ; // 输出:200 元定金预购,得到50 优惠券
121
+ chainOrder500 . passRequest ( 3 , true , 500 ) ; // 输出:普通购买,无优惠券
122
+ chainOrder500 . passRequest ( 1 , false , 0 ) ; // 输出:手机库存不足
123
+
124
+ Function . prototype . after = function ( fn ) {
125
+ var self = this ;
126
+ return function ( ) {
127
+ var ret = self . apply ( this , arguments ) ;
128
+ if ( ret === 'nextSuccessor' ) {
129
+ return fn . apply ( this , arguments ) ;
130
+ }
131
+ return ret ;
132
+ }
133
+ } ;
134
+
135
+ var order = order500yuan . after ( order200yuan ) . after ( OrderNormal ) ;
136
+ order ( 1 , true , 500 ) ; // 输出:500 元定金预购,得到100 优惠券
137
+ order ( 2 , true , 500 ) ; // 输出:200 元定金预购,得到50 优惠券
138
+ order ( 1 , false , 500 ) ; // 输出:普通购买,无优惠券
139
+ </ script >
0 commit comments