java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17899|回复: 103

【Java源码】Java实现简单责任链模式 github源码

  [复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66083

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2019-8-1 01:55:51 | 显示全部楼层 |阅读模式
    《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  O
    public 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, H
    public 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! N
    public 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( r
    0 ^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, ]( b
    public 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; n
    import 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
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-1-9 02:11
  • 签到天数: 30 天

    [LV.5]渐入佳境

    12

    主题

    3299

    帖子

    7134

    积分

    普通会员

    Rank: 2

    积分
    7134
    发表于 2019-12-24 18:58:36 | 显示全部楼层
    棒棒哒!!很不错!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3187

    帖子

    6374

    积分

    普通会员

    Rank: 2

    积分
    6374
    发表于 2019-12-27 06:57:20 | 显示全部楼层
    棒棒哒!!很不错!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3273

    帖子

    6548

    积分

    普通会员

    Rank: 2

    积分
    6548
    发表于 2019-12-31 11:37:51 | 显示全部楼层
    java我来看一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3175

    帖子

    6352

    积分

    普通会员

    Rank: 2

    积分
    6352
    发表于 2020-1-15 21:12:12 | 显示全部楼层
    我能看看吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3244

    帖子

    6490

    积分

    普通会员

    Rank: 2

    积分
    6490
    发表于 2020-1-17 15:00:57 | 显示全部楼层
    多学习一下多学习一下多学习一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3215

    帖子

    6432

    积分

    普通会员

    Rank: 2

    积分
    6432
    发表于 2020-1-28 06:41:02 | 显示全部楼层
    真是好资料
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3241

    帖子

    6482

    积分

    普通会员

    Rank: 2

    积分
    6482
    发表于 2020-2-16 20:23:15 | 显示全部楼层
    不错 支持下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3170

    帖子

    6342

    积分

    普通会员

    Rank: 2

    积分
    6342
    发表于 2020-2-27 20:23:33 | 显示全部楼层
    学习学习再学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3328

    帖子

    6658

    积分

    普通会员

    Rank: 2

    积分
    6658
    发表于 2020-3-6 23:14:56 | 显示全部楼层
    谢谢分享,先看看
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2024-4-19 12:20 , Processed in 0.102321 second(s), 35 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表