|
《Java实现简单责任链模式》场景:客户的购房折扣申请,销售、销售经理、销售总监、CEO依次可以批准不同粒度的折扣。
N3 V$ s& n+ v& `0 Z, o+ R3 J: w! h, S. `/ F- o
部分java源码:5 i; q; Z) k$ Q q$ f
1、
( B: z; b5 G: ^5 t, Dpackage com.javazx.cor.handler;
" M6 e: k& ]1 f, W: X% Q3 f( p" c& Y2 Q9 X. i8 U
/**9 d v7 l, ]/ {4 f! a$ U
* @author: itmrchen, w7 J& Z* O3 |& |! Z) c% h
* @Description: 价格处理人 负责处理客户的折扣请求
, q9 p% B+ R" j( I: b * @date 2019/8/1 1:14
. m0 f. ~4 n. C- Q* h( K */
; y8 |( M- `$ R( L! rpublic abstract class PriceHandler {: _4 K8 u/ {; U& R. l
protected PriceHandler successor;
) V4 p: d; q- }3 r9 U: t! F$ E' v5 N$ U
public void setSuccessor(PriceHandler successor) {' M* b6 ]" m- m. l
this.successor = successor;- o4 h. s* f$ ^. \4 ]
}8 m, _" {; [1 |) S! Q
* H: ?3 m+ [/ D) B* x+ t
/**
; X( a/ s( g# b% v" g * 处理折扣请求' c' M" Y+ O$ l1 }
*
* G9 N2 _& I" d: ^ * @param discount$ z- m) u1 a1 i1 ~- z
*/
H7 j" X1 d! K& j, R4 u" u$ T/ Bpublic abstract void processDiscount(float discount);6 a: {- ?6 F+ c
' q* G6 \5 @6 x
/**
7 e) c( c' a) ~5 v ^# Q7 n * 创建PriceHandler的工厂方法
# E# ~* X" ?- B& A1 g( S2 c6 p- [ *$ I) P" N8 k: G6 g" H& s
* @return
* {0 g2 O$ V+ p0 h2 ]! ?*/
# {/ F8 g, r$ l7 Spublic static PriceHandler createPriceHandler() {) q! @# }$ A: M* s5 G
PriceHandler sales = new Sales();
5 G; R2 @; k4 a4 _6 N, j# D* Q PriceHandler man = new Manager();
8 ^9 f! V0 M8 {3 }4 ?; y. u( S9 y PriceHandler dir = new Director();
; J6 `9 e4 _0 d' R- ]. T' p PriceHandler ceo = new Ceo();, j, {+ G" Y6 i% \* O
sales.setSuccessor(man);
9 g' K, s; M; B& T7 w man.setSuccessor(dir);
* L, u* \" @( z% Y `3 B dir.setSuccessor(ceo);) n# X$ k g' X* A/ @
return sales;
& b" e% [& ]" {- l1 l3 ~2 E }
$ D/ r! a1 a8 O3 F, p# u* i}5 q# O, K6 ^+ @6 Q5 o& V2 [
7 \0 P1 |; M. h% ~# D7 H" u6 _
, X6 V g8 H+ \" n- Z
2、; U" k0 m; M; a# L# l
package com.javazx.cor.handler;
: i$ ~5 v4 ~0 p" }8 o7 S5 m5 P* Q) a) R7 T# F! o B
/**0 S8 k# u0 }6 j. p* }
* @author: itmrchen
; F$ c/ d2 Q4 [' s * @Description: 销售 可以批准5%以内的折扣
( r. _) w1 r& s5 X. x( E3 u L * @date 2019/8/1 1:19) r4 O; \5 N$ _ O+ f
*/
& f" D- r8 ~6 V) L6 Jpublic class Sales extends PriceHandler {
5 d. q1 t$ Z' s# j, b5 l @Override
! f( |2 |9 }2 h4 H0 ^ public void processDiscount(float discount) {( {" j6 |, P2 a) e
if (discount <= 0.05) { r$ ~$ s3 |: O. L; q* |" n5 w; h
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);# q5 P4 z. H) L5 V/ z
} else {
, V8 q& B1 r; a$ y9 q successor.processDiscount(discount);1 j8 h7 N; A" I% J2 i3 v7 E- `
}
1 L! _4 b0 c% j& J }
2 d0 O4 y0 X( m; m* W1 K! R}! y% ~4 {. q+ B0 L+ C' S5 h9 L
$ [! X R3 I0 {/ I
3、; z `4 @1 t" C8 V4 e' {$ Z; k
package com.javazx.cor.handler;
! p9 o- H& o' t' ?; Y2 ?5 X
* p5 \- O4 q U- J" S, t/**
) j" X- N H: @" w2 c* D" S1 j * @author: itmrchen
7 u$ h0 i$ _1 O/ L& K- Q; c, L/ ]' p * @Description:销售经理可以批准30%以内的折扣
8 e) ~& W$ Q6 g& n; Z, u* @date 2019/8/1 1:241 h+ ^+ b! t C- e4 q
*/
1 a) s/ f& O/ V0 g% A: V0 T' g% Gpublic class Manager extends PriceHandler {+ G/ |' c5 B+ d
@Override
* a8 e" x. j8 k1 U: _ public void processDiscount(float discount) {3 x+ ]2 H* P" ]5 y3 Z
if (discount <= 0.3) { Z* d- ~2 F7 J# R! P& G- L' O3 {
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
1 x0 Z0 b* C# |7 h, q% Z5 Y: r8 e } else {& e8 J8 z# T( [& c; g. e) K" ~
successor.processDiscount(discount);: @9 M% D! a$ {1 T% e; h
}
6 _ n: u. H$ i* g6 X- P }7 p. o4 p7 U7 J. }4 T$ |2 B, Z
}
$ M: N; ]& B8 v9 J: d7 A% d: S% c' K+ s8 ]. F' r, d3 m
4、7 S& J$ j* k3 T8 S& } A2 k4 e
package com.javazx.cor.handler;( X, B \$ k/ `, n
1 V; g0 C! n5 Y/ V7 q
/**+ k+ b$ `4 ]$ o$ b8 }5 W2 Y
* @author: itmrchen# [1 [# z) z T9 Z( X' ]' z
* @Description: 销售总监可以批准40%以内的折扣
P& l- l1 C! s: G$ g% h * @date 2019/8/1 1:26
# ]4 ]7 R. M2 b& i */- {: J! k5 I( ~* p& Z
public class Director extends PriceHandler {$ Q7 F4 J; [/ ]% K; O. @# a7 i! J6 u
@Override
t( b1 k1 J, [0 ? public void processDiscount(float discount) {& \& A% n V+ F, W
if (discount <= 0.4) {9 V8 K8 d4 P+ X/ I4 ]4 z: b" s) |
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
3 }! P y! O$ O& @* p } else {' p* j# d. B: K. d
successor.processDiscount(discount);
$ s* o- {- x6 } } T5 Y3 }+ b/ e9 ~7 N; r5 B& b( E
}6 L/ C# Z) k8 v4 S
}
) S3 j. q' ~( |, h3 S9 r" J5 O2 T4 X7 w- z* I L7 J' I& T% g
5、) D( _2 s9 B& \
package com.javazx.cor.handler;' x J$ ?: p: F( Y/ a
& ?: R$ b8 x6 U9 D( W4 F% W4 w
/*** d6 m) R! A# H7 {
* @author: itmrchen
8 r, Q( K5 v0 v6 x# o% J( O * @Description:CEO有权拒绝超过55%的折扣, v* u% b$ [0 G
* @date 2019/8/1 1:28
N$ G2 [3 i( }! |0 W: t* b' G: o5 ` */
1 |: V6 S" ]+ K' V m; ?8 kpublic class Ceo extends PriceHandler {' W" I! p4 g% E8 A2 i
@Override
( D2 V! Y U) b8 w; @1 ]( l public void processDiscount(float discount) {( b" ^! ^7 O6 ]1 T
if (discount <= 0.55) {- f% h& t' w, F5 j3 T
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
9 b" `7 h# a, A8 D, Z5 m } else {. N/ u7 d: Z1 [- E6 F
System.out.format("%s拒绝了折扣:%.2f%n", this.getClass().getName(), discount);( r3 ^( f. c7 p N. A
}
5 X! t7 T0 n& U$ g, K, P% W }! e8 r4 r/ w& d% P D: N
}$ |7 E# D" e7 q9 I% w) A3 H
& D( R0 ~; j' L r$ {% }: N
$ T, Z9 y* I2 U- I
6、
' i- }, w, G2 O* bpackage com.javazx.cor;
) A9 Q# p* @2 K3 D/ Z# x
. {9 N) ~1 h) g. _" j) L/ X1 Aimport com.javazx.cor.handler.PriceHandler;
; v) b$ I8 ]& L, V& ]/ R% x5 r6 I! Z% Y; k5 W: B& `; w+ x# z
/**
M; `8 D. J( J6 b2 @; O * @author: itmrchen4 i/ E9 L0 U8 `" j$ w. G- `9 c. t
* @Description: 客户请求折扣
: T' k; W! b q, {1 U3 o4 K% y * @date 2019/8/1 1:321 h L' D" {: ?
*/
2 i4 N) p0 U1 t: f/ j4 ~public class Customer {
* a/ r4 k t. s' P: w8 h) w private PriceHandler priceHandler;) V. C; P% _* J
. T& G, ~; ?- F ^5 ?4 w+ Q' a! P/ S public void setPriceHandler(PriceHandler priceHandler) {: b: R y5 ?2 |
this.priceHandler = priceHandler;
/ k/ ~& Y9 n, ?2 ~$ B }
& h6 S9 A9 V0 D) |' f4 {: n$ ]' N
public void requestDiscount(float discount) {
/ o4 u( w7 ?0 z e priceHandler.processDiscount(discount);) `6 ]% q+ p2 i6 |# P$ @
}# [1 \5 v4 z1 K" N0 R
% {& e! H. A/ K5 A
public static void main(String[] args) {
# t7 b- D; K! o Customer customer = new Customer();' m) Y' {9 C4 A
customer.setPriceHandler(PriceHandler.createPriceHandler());
/ J. h1 [. a8 I8 i! h w' g0 ?0 X" T+ ] customer.requestDiscount(0.01f);
. ]1 u6 t. k2 v; T7 r: Y6 c }
8 j: T- t! R. g; a}
/ `. c, u% h) r1 ^) }/ R9 y& B
: e% A* ]' T# t* O4 v0 t" c* ^ r
4 A8 ?( a, q+ ?+ b1 l! ^& i2 a) I4 v# M/ |( {( U$ E0 J8 [1 Y
3 `1 M g4 C' s8 c/ C/ r: D3 V; }
+ V! P9 K4 V+ q- Y
0 A& i3 |: |8 Ngithub地址:https://github.com/itmrchen/springPro 位置在 springPro\src\main\java\com\javazx\cor包下面
! [4 A: e+ m/ w5 e: D' N+ v
5 }; F0 Z( t9 p1 M. L/ i' E: O+ ]
- O& B% A5 n2 k
" G4 K1 t6 A* t* C+ t; u
1 f: C' }8 U$ [0 K* @- _# ?1 P8 i' I& k- p5 C
|
|