java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17904|回复: 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依次可以批准不同粒度的折扣。
      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! r
    public 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/ B
    public 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 S
    public 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 J
    public 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% G
    public 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 k
    public 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 A
    import com.javazx.cor.handler.PriceHandler;
    ; v) b$ I8 ]& L, V& ]/ R% x
    5 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) I
    4 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
    回复

    使用道具 举报

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

    [LV.5]渐入佳境

    12

    主题

    3299

    帖子

    7134

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3191

    帖子

    6382

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3277

    帖子

    6556

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3176

    帖子

    6354

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3249

    帖子

    6500

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3220

    帖子

    6442

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3247

    帖子

    6494

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3176

    帖子

    6354

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    3330

    帖子

    6662

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-20 01:57 , Processed in 0.071492 second(s), 29 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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