|
《Java实现简单责任链模式》场景:客户的购房折扣申请,销售、销售经理、销售总监、CEO依次可以批准不同粒度的折扣。) z: ]$ u; x* h( X
, I; e' |7 H: {2 S部分java源码:
- ^, g3 f# l# a( K& k5 P2 M1、
7 s I H" `* T4 F2 Xpackage com.javazx.cor.handler;; t! B! `9 ?3 Y# R" c" a
) g6 f2 Y( {+ c w
/**& b2 r2 Y8 j6 M( T8 c" h8 p2 T8 W1 n
* @author: itmrchen3 E' y4 s0 Q3 ]% X; o' _3 p7 n
* @Description: 价格处理人 负责处理客户的折扣请求
! E+ T$ u& E. V2 B7 n * @date 2019/8/1 1:14
; F- S" a& |7 q */
% h+ a, G/ b2 tpublic abstract class PriceHandler {
7 z/ R8 }/ E* X; P" X8 U& Q protected PriceHandler successor;
# ]5 ~/ N/ r9 C C9 L& e( ~- _/ P: J; G' ?+ V Z1 i
public void setSuccessor(PriceHandler successor) {1 a h# ^: V& A
this.successor = successor;; O" `9 k- ^% S( F- L2 |0 ]1 t3 H
}# g+ [+ c2 M" N* r7 _8 R0 u
t- G5 }9 [/ b- q; _4 X
/**
; n- H; h% f3 m! d4 N) L) { * 处理折扣请求
/ s6 [4 ~ i4 z+ W ** ?' }9 A4 ~- X7 W8 z& X1 e1 }6 o
* @param discount. N% K9 J7 [! T! ^2 I5 F
*/
# ^2 p0 U# W1 h# s8 v; epublic abstract void processDiscount(float discount);3 ?1 V/ N( J3 u8 c+ v2 u$ @3 l( J
$ M! b4 ~4 C5 ]( `* ]& k( A7 m
/**
! X5 d8 b, x% G& ]* z+ k * 创建PriceHandler的工厂方法! n) L! ]" P% @; Q: v( O& a& M
*; t: I/ |! D. ~; T8 ^
* @return) j! Q! g" ^: [. n B3 D
*/6 }7 ^. b6 F5 U8 u5 K, t
public static PriceHandler createPriceHandler() {
) z( _: k& _" }$ D2 g! H; _0 g- ? PriceHandler sales = new Sales();0 Z% @1 P/ ~1 W5 O, R3 R
PriceHandler man = new Manager();/ J/ g" S9 p6 C d4 O
PriceHandler dir = new Director();
' \3 `% b2 l- W$ l; S PriceHandler ceo = new Ceo();" h7 x+ s; C3 j& q
sales.setSuccessor(man);; e$ H) _* E( p5 A H9 ^0 k
man.setSuccessor(dir);/ o5 Q& J& X' d6 _0 g
dir.setSuccessor(ceo);
: m0 Z0 n+ \, f: H& B( w return sales;) @7 }/ I( B: h
}
) o& \1 M3 f. Q. p}1 }. d0 u0 v! K z
3 r# m. |) s6 |
. ]) ]- K* Y# h& z( k8 h( r$ F2、: e. ?( r7 f8 J' A# d. ^: |
package com.javazx.cor.handler;2 y4 K" e+ J: X' K9 A
7 Z Y8 V( [! m4 S# _ G& u
/**
# y' Z6 `; Z7 d! x1 w# V0 e * @author: itmrchen! d/ q' i; d0 M2 X/ Z
* @Description: 销售 可以批准5%以内的折扣
; P7 R8 Y* O) U" h * @date 2019/8/1 1:191 A, w7 z3 h+ W5 e
*/2 r' E7 U& \. w, l; d8 S
public class Sales extends PriceHandler { F2 d8 R4 s, R: v3 K
@Override! i- R' @+ R* r
public void processDiscount(float discount) {
8 M* U6 ~* f' g/ N if (discount <= 0.05) {" {5 `! B8 J. h' {( S. @
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);( l5 }; t/ k: n! [
} else {
0 K/ l4 d0 C T& |. @4 e successor.processDiscount(discount);
9 ^" v, O) r4 l. G }. G/ K: m* n! u! Q
}7 Y3 K+ M r$ b* s! V/ l! O
}
- h5 G- I! R' |1 {4 n( K, B
! b/ Y F7 N$ s0 P; x: r5 l3、
& C% x. L% h1 l2 vpackage com.javazx.cor.handler;7 i4 A. L# }. D
4 G7 B9 K/ D. o9 [+ ]
/**+ { @& O: v8 T- D% [
* @author: itmrchen
3 `% M- w* n2 ]- G4 u' L/ R * @Description:销售经理可以批准30%以内的折扣% Y1 ?( ~) V+ V# n
* @date 2019/8/1 1:24
# D5 v1 m- I* v8 y0 R: F/ ]( S( ? */5 D" y- T# v+ K6 H* B1 i& d
public class Manager extends PriceHandler {
7 [0 x) _, z1 v @Override
5 e2 i: [* N/ M5 ~" ?& ]+ Y5 e public void processDiscount(float discount) {( Z8 o) H" P6 \9 V) Q1 m5 I
if (discount <= 0.3) {
7 N+ f9 s6 q3 q4 b System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
9 L1 o# }& i, Y4 h) Y } else {" K- g& m% a1 d3 {
successor.processDiscount(discount);
( \7 n+ v+ H J' ~3 [6 D+ ~- i- u }# b+ G# f$ h8 @) {+ w
}3 S' }' T# z2 \6 o. q- [' I
}7 z9 z! G. z3 W7 ^
, a! c6 @1 p2 E9 j4、4 n5 Z2 C! C1 i% P
package com.javazx.cor.handler;
$ F8 P$ b4 U6 n) r# k' F
7 H1 Q( ?+ Q" ~9 r; L/**
. d2 l9 v' ?% q2 _: p! n; S * @author: itmrchen# D9 f+ O: B5 T
* @Description: 销售总监可以批准40%以内的折扣
# ^2 B1 M+ y7 l * @date 2019/8/1 1:26# p& W( W5 @' {! W
*/
7 t0 [6 M" l# O+ K# kpublic class Director extends PriceHandler {
$ h3 P" L# c% i' \( K' C @Override
3 T* y; J0 m2 i9 S5 P5 B public void processDiscount(float discount) {
4 h/ w$ @ ]2 P w9 x; J if (discount <= 0.4) {- S3 H( H$ }. K3 X C: O
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);/ P( L& n% r6 m4 r2 H4 ~8 Q
} else {5 o( d& `3 z+ o/ N1 T0 I. w
successor.processDiscount(discount);
; q' g9 }! V c0 k% Y; ` }& l2 K, x1 r+ [' `( F& d
}2 \. y% d, W6 f" n- w6 n
}
: P% r0 p9 ]- |& f# g- V6 H
6 A T O# `) m5、, w: G+ s8 k% R: }
package com.javazx.cor.handler;2 M% @% D) w! ?0 V x
- H, d1 o3 J0 R8 X9 S1 K/**
7 {: W' X+ S- q* i5 y S& z * @author: itmrchen
1 L R! P3 l2 k# R% U9 } * @Description:CEO有权拒绝超过55%的折扣5 \# W5 T5 Y. q8 a7 o8 I
* @date 2019/8/1 1:285 N* N3 O. m1 `4 T( v$ |* `
*/8 A! X( |# t/ x# b( Q$ e7 J* X
public class Ceo extends PriceHandler {
$ P+ j0 B9 m/ w& { @Override$ d) M6 l, }' }- d
public void processDiscount(float discount) {
$ ~# g3 c' p+ l' K6 [ if (discount <= 0.55) {( d) A" b* _" O% m4 e/ L
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
5 R" y6 ^$ U. R( _( Z" h } else {
( G* `8 |6 y$ n System.out.format("%s拒绝了折扣:%.2f%n", this.getClass().getName(), discount);
% u& x0 |/ P' k% W2 }& ^ }/ Z% g P, ?3 I
}
5 M7 E6 |/ S, `. N n5 d}5 d/ W6 n3 U1 I: h# f- L" V
) N1 e5 s; w n8 g0 m
, |+ R! ~& v$ c6 y% S& J5 }" H
6、 y: H4 d' ]& t8 ~' C, K0 V/ x5 x
package com.javazx.cor;/ i# `/ }0 v4 J9 j2 `# [
5 Y5 v0 t; V. y" e5 {( \. ?
import com.javazx.cor.handler.PriceHandler;+ e# f1 k3 @, y, G
/ Q3 E& d3 p/ r" e
/**4 X% p/ j$ q6 H$ ~
* @author: itmrchen
4 I* a! j" r6 x! S+ e * @Description: 客户请求折扣
# F& u% M3 Q. H * @date 2019/8/1 1:32
' W( V2 z/ h- Y5 Z */7 O/ `+ R* u& a2 k# z) C3 ~; F
public class Customer {
. Q' |8 c6 A. ~ F0 H1 q: O private PriceHandler priceHandler;
. i* j p% V2 m
6 t0 G% N7 r3 C w2 a7 O public void setPriceHandler(PriceHandler priceHandler) {
2 S1 `. f# i7 C3 ]6 F# G; F0 a this.priceHandler = priceHandler; n+ g6 p9 m( ^, ]& w
}
5 F* t; ~! G q1 x' {5 z j F0 q% m* ~4 v, W2 @# k" m" ~
public void requestDiscount(float discount) {) I( a% Q7 a# V5 }* L, L- v2 {. y
priceHandler.processDiscount(discount);: G6 T5 O% t9 _! _
}3 t, I5 C8 s" x$ b' ^7 \: ^( ~7 @
4 F6 w8 U# x: a4 \; l4 V0 x6 P% a
public static void main(String[] args) {
7 @% z) |8 X' T# ] Customer customer = new Customer();3 z( w3 @, [9 c9 r: p; @3 p
customer.setPriceHandler(PriceHandler.createPriceHandler());$ ?6 e4 b1 u; U( a+ [7 W/ [4 T
customer.requestDiscount(0.01f);& X# {% t3 ^- e+ \% _
}
& m2 G) Z" N: |% P9 c3 C0 W8 G- M}. G' M: J6 ^% w8 y8 W" y# \
; T4 L9 f& G0 {% `1 u w' o8 s% s% _. J v: I. |0 F
( g2 k5 [; X: a6 Q, j* c" Z, Z
' J0 D& s2 G& o
% v& N( x' J n. `
9 N! D0 h0 p0 t6 ~& v' _2 o% Q
github地址:https://github.com/itmrchen/springPro 位置在 springPro\src\main\java\com\javazx\cor包下面1 O9 `8 k a' m6 W+ ]. @
6 U$ R+ z2 H" |$ `# Z1 r( `! t0 \; ]" u/ y
% T5 r0 g- h# [! Q0 M
2 P5 N6 h( I$ X$ {: k! u; E$ ?! \* u: F+ e `1 J- e4 [
|
|