|
《Java实现简单责任链模式》场景:客户的购房折扣申请,销售、销售经理、销售总监、CEO依次可以批准不同粒度的折扣。, P/ ~/ ^ x7 |9 n+ X$ s
/ E# J, L/ I' z部分java源码:2 |8 a# A% i# b; U
1、
: F% D) J! @8 Y( ^! m+ t4 ]package com.javazx.cor.handler;
4 W F- b8 x. @% b; S+ \' p' n
- u" b* o% ~0 U$ ~+ [, K/**
. W) G- s( A0 z7 c8 a * @author: itmrchen. p+ L$ t% L: P6 e$ }& d
* @Description: 价格处理人 负责处理客户的折扣请求
' F( ?2 i& r- U8 O" ] * @date 2019/8/1 1:14/ V$ t D- y8 } Z$ k
*/5 M* k+ w+ `: A. G. |- B0 L
public abstract class PriceHandler {4 @0 X( D$ T5 F1 G) l
protected PriceHandler successor;; W; m; F; Q8 H
# e5 m7 D' ]1 H" ]0 Z/ V* h
public void setSuccessor(PriceHandler successor) {
9 _' @2 j8 I8 {/ g; C/ S. I, u this.successor = successor;( J; V7 f% i$ @+ M/ L' ]" Z* z
}
+ h+ O$ s9 k& A
+ N9 k. y" {0 E6 Z2 Q, ]3 e3 T /**& ?7 j7 l1 g; V; |9 F; G. n
* 处理折扣请求
2 B$ W1 T+ h$ f8 k: N$ {1 } *
# W) l. N% }5 R% N3 c# w * @param discount3 {' a7 \( g% `8 h2 _
*/
9 G$ N7 A1 F6 i$ s Opublic abstract void processDiscount(float discount);' R0 r% X" Y' V' h4 p3 g
* ^" f, X) K4 i
/**
3 f/ I! P9 R! m$ Y+ _ * 创建PriceHandler的工厂方法) u6 ]0 U2 w7 S3 L; \) F8 R0 {
*
8 y' o4 p. ]+ S1 Y0 h4 G * @return9 a$ K2 b7 d: s3 L; j* G) G- ?
*/
% O) P8 L- {5 r. i# M, Hpublic static PriceHandler createPriceHandler() {4 I" D, x2 q5 P h. C/ p2 D, j! R5 y& ~
PriceHandler sales = new Sales();
* W$ ~) Z0 {9 |( o& S& H0 J8 O PriceHandler man = new Manager();3 |7 K$ D1 ?0 L. m! Z: x
PriceHandler dir = new Director();* M" `' P* |1 e5 u# w# i8 W* ]' c
PriceHandler ceo = new Ceo();
0 {, E3 A6 I+ I3 J7 U u sales.setSuccessor(man);2 ?0 K- i6 q, t2 `4 `" F# T* s
man.setSuccessor(dir);
! U% K1 a3 k) P- ]2 i: U2 H dir.setSuccessor(ceo);$ }9 n/ e& f. x9 l
return sales;* {3 ^6 i9 i) N5 X) ^
}( T+ K+ S& P, q- q Z$ K a: S* X
}
: z- \9 \0 ~! ?1 J
" d) T2 _& _3 k5 m9 K! a& u
; f6 R$ ^) p& n; R- y \2、
8 ~! s- l0 u' b6 D: a' P% ^, |- z$ kpackage com.javazx.cor.handler;
: M8 t' `5 T T: @& i: ]* P) {6 N& E# _! b4 ^
/**1 s ~/ B$ o4 G) O7 d5 x
* @author: itmrchen
' p$ E1 M, B" M* k! t# [1 k- w * @Description: 销售 可以批准5%以内的折扣
) m( E9 i8 z/ ]2 @/ W4 o& v * @date 2019/8/1 1:19
2 E! {8 S! D% V */
* o( o( m! m3 e% N7 G! Npublic class Sales extends PriceHandler {
; A4 _! {& a( l S @Override7 G8 m9 d. u( [. K0 |
public void processDiscount(float discount) {
$ u+ |8 z: T+ J& H" O if (discount <= 0.05) {( W0 k' _& R. F7 ~
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);8 Z6 D) k/ Z# h+ C& C2 W- [ Z
} else {6 z6 I8 T1 K, p
successor.processDiscount(discount);
7 t0 w3 ^; g5 \% A: R }# `: B2 B/ J2 C8 y
}( Z1 |5 t/ r9 H; Z6 j' z7 {! f
}
% ^, G! Z+ y3 N& O0 b1 A' s# Z, m2 m. n! v8 v
3、9 ^% k7 E7 h2 w$ o1 T8 H
package com.javazx.cor.handler;
, \( W& \1 y; e; ]9 ~$ B( r0 ^0 w$ k n% S4 t
/**
' L: U k- X6 T: l6 ^ * @author: itmrchen# b# _: E' D9 b* s) H; \: N9 {
* @Description:销售经理可以批准30%以内的折扣
* Q( K- V8 g: y* @date 2019/8/1 1:24
2 A7 T2 _! q/ V. G" N( f7 E */
2 n7 q* g7 n: Z" ?* p, ]( bpublic class Manager extends PriceHandler {
! H( I; o, O0 U) v3 ` @Override
/ I5 o; ]- B! M0 D) ^ public void processDiscount(float discount) {* v" T* O; k5 \1 ^( n W
if (discount <= 0.3) {$ ~/ `8 o% y; h) o
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);7 N4 B. @; h J1 J( G' {/ V
} else {
+ ~0 ?" M0 j9 Y* K. i successor.processDiscount(discount);
* M( Z' B, _7 x" N& } }, Q2 J* P6 ?4 s
}6 j2 ` o$ R7 x4 E5 H/ \2 Z
}
* e' b, V8 ]+ o( A1 @
/ u! _* a! | T6 P R! ~9 g4、' `1 B3 Q7 _5 M. o
package com.javazx.cor.handler;; V& N2 t& j* I; M) C
- l$ M# }$ k1 k: J5 M- N/**8 |: k7 ^% }' d) E% r
* @author: itmrchen
- h7 p( C* ~6 f- K2 d; d+ r7 b * @Description: 销售总监可以批准40%以内的折扣
6 L! f0 c f# E5 W1 @ * @date 2019/8/1 1:26
: {7 b4 _ }1 o7 R" Q */ u8 ~4 Y8 E* ?$ l8 J8 K
public class Director extends PriceHandler {4 J' O: Q6 ^! L5 g0 G0 B: p
@Override
" g. I' j4 a# W; T public void processDiscount(float discount) {
* E$ V$ E- D5 w' ]4 u if (discount <= 0.4) {* H* f0 M% H, _( }. |
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
5 y8 r0 I! @8 ` @ } else {
8 p" H$ r2 t& P/ ~! B& E; B successor.processDiscount(discount);7 z+ y& d6 N2 \+ z/ t1 v
}
! ?4 R: D& K# \7 w. f: V+ i# k }
1 \# d0 z* ^; P- ?- e% S}; Q8 w4 D* N! u1 F" F2 J' n
' p5 X s$ C" @- k
5、
' Q1 n0 a, g. C, {$ @! ?2 l' b* tpackage com.javazx.cor.handler;
4 D' H0 B& v4 \% c1 M2 R
( W! [7 m+ y2 N2 z/**9 |* [# a/ P6 V3 `" h! n3 y5 W3 s' H
* @author: itmrchen! P0 Z& e8 G/ d, s& {
* @Description:CEO有权拒绝超过55%的折扣+ Q% i! e( T0 ^- P
* @date 2019/8/1 1:28
2 Z4 q0 D: Y3 o) o3 t$ ?; l% G */: E6 l/ ^/ Q3 W* i
public class Ceo extends PriceHandler {
+ l$ C0 W( Q; R! _: ] [8 G @Override) a2 \" I9 j+ D* V) K- ^! g- y
public void processDiscount(float discount) {
+ Q( S. j! x" a( N if (discount <= 0.55) {
2 ?! b3 n* y* [& n System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);% ^& W, u6 W; o
} else {, U1 z& r" z5 z+ w" Q T
System.out.format("%s拒绝了折扣:%.2f%n", this.getClass().getName(), discount);3 h3 u( E- b3 j! r" V7 t
}
/ C* s" Y# W5 k ^6 @5 E6 ` }7 G5 S8 P1 J9 X# L( n5 g; C
} H. l* b# a7 H, S4 ]
5 h# z: M( s6 m5 Y. A4 H' S% ?
. u6 K, Y8 Y: |6、
0 n- d6 P' X7 ^/ h& v0 u1 ]package com.javazx.cor;
1 @& p+ h, H& o5 l' v7 X5 v
) `3 Z, d0 e; nimport com.javazx.cor.handler.PriceHandler;1 a2 }$ T2 h9 y S3 J$ a
4 d8 O( {1 X/ d# Z4 ~+ b: `) |" N- r
/**- V9 {9 t! \$ q7 s/ G
* @author: itmrchen
( f% a; b6 D* q" H% @) X4 j * @Description: 客户请求折扣9 v7 j3 f4 t4 o3 R6 l0 S
* @date 2019/8/1 1:32
4 j' q3 ~) p2 ]' ~ */9 w x% s2 P0 t! R' d, Z% g8 b
public class Customer {. J; i5 \) X# R: V4 t4 A1 x
private PriceHandler priceHandler;7 q: Z0 k- [) j( ]; q+ y
6 m$ h8 O b# E- Z/ f
public void setPriceHandler(PriceHandler priceHandler) {
1 B3 B& }4 |9 _* |- Z9 l this.priceHandler = priceHandler;
/ f4 B6 v5 T# N! K* I; S6 C }5 R0 T- P5 [4 L9 K
$ s2 q. B- G: P u# N
public void requestDiscount(float discount) {
% ?' Y; `0 P/ p) t, H$ j' W4 [ priceHandler.processDiscount(discount);
' j" C6 V0 p/ M' l }
6 P! L. V/ ~% E% S7 V' P1 h& I- ~/ m$ F) v7 X: n
public static void main(String[] args) {3 J% z- ]; U) n
Customer customer = new Customer();
) E- _% ]1 u. W8 S( f customer.setPriceHandler(PriceHandler.createPriceHandler());4 N: B; l$ D: w; |( v
customer.requestDiscount(0.01f);' V( w, X4 Y/ ~- D6 y# ^7 \
}
$ @, R5 h, h J& Y$ A}
9 V* K8 w0 |# W$ ?' {, ?- P& H0 Y" }& ] o4 Y8 a& Y) o4 A
# A* G0 `1 O! E/ Z" l+ N: \4 }. M; T3 w# p G+ `2 M' \
9 A) d0 j; m% ^, c9 {; {
! r% U3 y& E+ Y
, T1 a3 ]5 D6 N6 Q; Kgithub地址:https://github.com/itmrchen/springPro 位置在 springPro\src\main\java\com\javazx\cor包下面
- N9 o" B8 l7 A) ? h3 g+ k# O
8 \" I) N, E9 D! ~: ]6 J- U% ?- t* o4 _0 T% j' B
7 D) `1 W( `9 m. Y% ], Y: ?/ M
& S0 i. L$ g0 J! q% `( x
3 C% n6 L2 ^5 Z; i- q% Y3 e |
|