|
《Java实现简单责任链模式》场景:客户的购房折扣申请,销售、销售经理、销售总监、CEO依次可以批准不同粒度的折扣。
: L) y! l9 m1 r- d' g
( V9 v: b4 J* f4 Z2 U: @部分java源码:
. p. P8 q/ r! _! a7 s r7 p1、
1 W' S' F6 J* @( s7 upackage com.javazx.cor.handler;* H1 A# x7 D% v. ]) F
' _% r4 V* u# Y# U/**; ]3 ?0 e( o* r3 A6 |$ P, `
* @author: itmrchen& L3 X0 k x, e# m7 p: f
* @Description: 价格处理人 负责处理客户的折扣请求
+ S" ?3 X" [& E( q D * @date 2019/8/1 1:142 ^. y" r% _* u5 L9 J W$ H" |' z
*/% K2 M# W. o& [: E8 v
public abstract class PriceHandler {! c% s7 k# J4 X- W
protected PriceHandler successor;
8 w" q3 z% P' a7 i5 \6 a) d X$ E2 }4 Q) y6 T4 Y* J& e
public void setSuccessor(PriceHandler successor) {$ D6 j4 {& c* ?; \, `3 X4 S/ h3 ]1 M
this.successor = successor;
0 X- {3 N6 e [: P+ W }
* H- [7 a( c4 F
2 a* _$ f0 Q. @% ^* |/ \$ i& T7 n5 j /**
' K- F. G. w5 y9 n4 J * 处理折扣请求
; m7 t1 X4 T; [( ^9 f! q *" o$ I' v2 x( |$ n9 i$ i4 _$ K* [
* @param discount
_1 M* s9 s' F6 S5 [0 B- r*/ d9 K6 X, }3 m5 _4 g4 c
public abstract void processDiscount(float discount);
" X& ^- w8 ?$ g5 H' s7 w; q$ E. ~+ t! J P6 Q7 D6 R
/**
: c& I. ]0 t) {% G1 X * 创建PriceHandler的工厂方法
. [/ `! J0 W* [/ K! H0 K *5 w; q4 q5 L9 ?! [/ g4 d& _
* @return: ~3 k8 i6 O% X3 b7 |( R: d; P
*/% u' f' i( B4 d9 Y
public static PriceHandler createPriceHandler() {
3 Q, G) h5 y# t" @ PriceHandler sales = new Sales();
6 Q7 O! W; _) C7 h" | PriceHandler man = new Manager();
* T6 R% c& @0 { PriceHandler dir = new Director();9 B. \; A$ J( h3 K+ Q& Q _
PriceHandler ceo = new Ceo();+ g( n; Q. c* E9 Z& N
sales.setSuccessor(man);! l( {. w4 h9 ]1 _: X
man.setSuccessor(dir);9 l; H G8 d" s4 D
dir.setSuccessor(ceo);8 j7 X' F! |" P! P, Q$ i9 Z8 Y
return sales;
, c, ?& D/ q) V% c3 Z }
+ [% l# ?: U) y/ y; k} ?' V9 B# h8 r; @
, l; V1 w) d6 q0 S
( v/ l( [) [5 ?$ X& e" F, N9 L2、
3 T# O$ b, ]3 m% x! A$ w1 a; |package com.javazx.cor.handler;" B) `: i+ q' l2 Q3 A8 m; E3 A
0 k) } Z. Y5 z* E1 d& P/**/ L; [0 X5 [- ^: W2 P2 o/ Q' ~
* @author: itmrchen: P" z7 U9 c) W# b6 Z8 z; K
* @Description: 销售 可以批准5%以内的折扣
# i, j7 ~" i1 r9 Z1 T * @date 2019/8/1 1:19
# m$ ]5 j' q: I */
) ?! p8 V" N/ N% {' npublic class Sales extends PriceHandler {8 ~, c! l2 w- n3 c9 D
@Override; }) _6 t, s% i# y. I2 i; M1 \/ a
public void processDiscount(float discount) {: j$ `6 L, ~5 R# Y* Z8 M
if (discount <= 0.05) {
5 _* m( [) V. t System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
2 p$ U- l7 m7 ^2 R } else {- G1 c" I+ B- y) V' K2 ], [
successor.processDiscount(discount);! `9 T6 d5 G0 R0 `. e/ T* z+ j
}! X- }3 S6 r: _
}
2 ?2 x0 w$ M. T8 z3 J# m* \}
" w3 y5 a. i0 q& q+ h6 @' J7 J: k/ p1 L/ n/ C) j9 h9 B" N
3、5 g. S$ b2 ^% L! z
package com.javazx.cor.handler;
4 g& i/ b" I1 D; O, J) F2 N: P$ G: n( I( t( `' ~9 j D. C% N# }
/**+ I' ^ c1 l9 k4 J! R& N
* @author: itmrchen
/ ~# ~. Y! q/ V0 L, @ * @Description:销售经理可以批准30%以内的折扣+ B, o% i% x1 ]0 q' B% p
* @date 2019/8/1 1:24
- K" M8 B( O9 E) X. O *// F6 E( i4 a' |% m1 p1 D
public class Manager extends PriceHandler {. _( }2 F4 }1 x) A8 K
@Override8 j3 g2 G- U8 T8 H! s6 _
public void processDiscount(float discount) {6 z* K9 E0 L- n: Y
if (discount <= 0.3) {
6 ~" }7 l5 ?/ M V- {7 X System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
! N+ E, @2 P+ m } else {$ T& c3 P# O" \* ? ]) s
successor.processDiscount(discount);
8 R" j8 E- |3 V/ R; @( l }" b3 x# [4 V, C0 |! k; y$ K8 K, d
}" w( ] U1 t! X) t) o$ C
}
1 J1 _" z4 v- s0 h% }$ I$ W6 e4 f8 v8 R
4、
- [" e8 C0 }3 U" Q( ypackage com.javazx.cor.handler;) q# P# a+ S+ A$ q
& X2 v2 u8 ?2 O" t; ]
/**$ V$ T& P4 _' r: P4 W8 D6 v
* @author: itmrchen
/ B9 C; D0 s0 {6 K+ V * @Description: 销售总监可以批准40%以内的折扣
: M6 S4 @* x) T( V, q5 r G: X8 J# R; | * @date 2019/8/1 1:26! |2 |$ J/ Q( v2 h7 C& [
*/
% |0 T% r2 ` Y4 Ppublic class Director extends PriceHandler {
5 o* Y T7 O# D/ j @Override- o( {- z" e, ]- l: B/ @
public void processDiscount(float discount) {
+ ^% y& O8 B. A if (discount <= 0.4) {
) {- b# ^1 H0 Y( y System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
6 K& _+ a: W8 M% O5 C } else {
* b: M' T7 [' y# s0 B0 X+ M0 |0 E successor.processDiscount(discount);+ l1 C4 B( r8 _* g1 i5 v/ Q, Z9 S
}
% ^9 G* {) Q0 B& N& M/ S% i }
( @. u9 u$ D( Y: _% [}
, w& a; r8 [- m! g6 r1 l4 x- C% p# A/ g/ Z$ \
5、
9 Q1 s! N/ K8 }6 Fpackage com.javazx.cor.handler;
' a6 P! U' _) A& \8 ~8 @* |" J- M: t3 u. W
/**- L# ~9 M' k1 u) t7 V
* @author: itmrchen3 h* F! ]1 w2 y0 m$ d: j+ t
* @Description:CEO有权拒绝超过55%的折扣8 j4 Y* x2 x# g5 n
* @date 2019/8/1 1:285 ]8 ~% ^# B" I0 i. B
*/
0 `) G8 U" C k6 l0 Ypublic class Ceo extends PriceHandler {
) D z' c( n) _: Y" N$ C3 D @Override
1 O) v$ V9 A% \( V! A/ v public void processDiscount(float discount) {
, r) E o; o6 H& a, \* K9 j) ~ if (discount <= 0.55) {) u% y: ~; H& x9 s2 k4 ?
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);2 {5 T" k/ V9 _" v
} else {
6 n( k6 X) P% C" M! ] System.out.format("%s拒绝了折扣:%.2f%n", this.getClass().getName(), discount);0 }5 J' F+ U. N6 P4 u/ |
}* h6 k* J/ s; ~! h
}+ z' k; j- X5 C8 T
}
' S' N3 H5 ?/ {6 }
' |9 H8 v. ^8 Y6 |8 H5 j9 Q& @1 a* U/ m0 C7 T1 _
6、* _' K- G. J( |8 S
package com.javazx.cor;6 G$ z* R& Y8 q2 L; U
: F; w8 @2 f/ ?0 Zimport com.javazx.cor.handler.PriceHandler;2 U; g$ K% c4 C* a6 I7 z
% N5 x6 ^( B' w9 u8 Z2 B/**
/ M. `4 L F, ~) w% ] r9 T * @author: itmrchen0 {8 }2 ?6 x( V! ?3 }/ J4 I, Z
* @Description: 客户请求折扣- a8 [ t4 |# I3 p3 C
* @date 2019/8/1 1:32# g0 }; B( O- q" o' O8 l
*/
2 N5 _* {$ U! o* Y3 s- B/ U! x0 Apublic class Customer {
) A9 A( w3 O' x7 o7 ]% P) ~' z private PriceHandler priceHandler;
! }8 g) ~' r3 S1 V2 L/ L( s
# H& |' h( d6 ]8 P0 Y) [+ Z public void setPriceHandler(PriceHandler priceHandler) {
# s6 q! ~ ~; t3 t! W. Q1 ^' ~4 D% i0 b this.priceHandler = priceHandler;8 C, x, B, d$ X8 I* X' `
}, P0 n0 @: K8 h6 z
+ ~" |' ~% ]9 C: [' L3 } L public void requestDiscount(float discount) {" V2 I! u6 y4 h# t
priceHandler.processDiscount(discount);
2 r4 Y* J" x$ y( P }0 j$ ?$ _% ?2 y" y- n
9 j8 {0 `0 Y* T& W D; G% z* R
public static void main(String[] args) {0 c% c) Q; u4 V) N" s
Customer customer = new Customer();
' _( P9 o1 I B customer.setPriceHandler(PriceHandler.createPriceHandler());
9 x8 `* Q, `' X. e9 c9 l customer.requestDiscount(0.01f);' e' m. p% J) z( s
}- u6 V! s# K4 N- ~3 @
}
. F. x. i( N Y* F# H7 _; y, c. w; n
, w) L$ d8 I6 ~$ V3 s& _) P, \
6 M4 R: r6 }6 y" m# K
8 F% ^$ f# Q2 N- o
9 }4 X5 s7 y8 h! w. Z) @: q) \
6 D' X+ X4 R+ B! d$ sgithub地址:https://github.com/itmrchen/springPro 位置在 springPro\src\main\java\com\javazx\cor包下面9 n) ^$ C6 ]- o& c/ i
6 ]/ B/ p7 P5 f( x; E1 Y6 W& m# c
& h' n* g# `6 o1 v5 r" { |
; u9 c7 r, O- o/ q; b& N
1 [: u, r6 }% C6 |3 Y. y& v6 {7 [+ G4 V l0 j) b
|
|