java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 22052|回复: 103

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

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

    [LV.Master]出神入化

    2090

    主题

    3748

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66756

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

    发表于 2019-8-1 01:55:51 | 显示全部楼层 |阅读模式
    《Java实现简单责任链模式》场景:客户的购房折扣申请,销售、销售经理、销售总监、CEO依次可以批准不同粒度的折扣。
    : L) y! l9 m1 r- d' g
    ( V9 v: b4 J* f4 Z2 U: @部分java源码:
    . p. P8 q/ r! _! a7 s  r7 p1、
    1 W' S' F6 J* @( s7 upackage com.javazx.cor.handler;* H1 A# x7 D% v. ]) F

    ' _% r4 V* u# Y# U
    /**; ]3 ?0 e( o* r3 A6 |$ P, `
    * @author: itmrchen& L3 X0 k  x, e# m7 p: f
    * @Description: 价格处理人 负责处理客户的折扣请求
    + S" ?3 X" [& E( q  D
    * @date 2019/8/1 1:142 ^. y" r% _* u5 L9 J  W$ H" |' z
    */% K2 M# W. o& [: E8 v
    public abstract class PriceHandler {! c% s7 k# J4 X- W
        protected PriceHandler successor;
    8 w" q3 z% P' a7 i5 \6 a) d  X
    $ E2 }4 Q) y6 T4 Y* J& e
        public void setSuccessor(PriceHandler successor) {$ D6 j4 {& c* ?; \, `3 X4 S/ h3 ]1 M
            this.successor = successor;
    0 X- {3 N6 e  [: P+ W
        }
    * H- [7 a( c4 F
    2 a* _$ f0 Q. @% ^* |/ \$ i& T7 n5 j    /**
    ' K- F. G. w5 y9 n4 J
         * 处理折扣请求
    ; m7 t1 X4 T; [( ^9 f! q
         *" o$ I' v2 x( |$ n9 i$ i4 _$ K* [
         * @param discount
      _1 M* s9 s' F6 S5 [0 B- r
    */  d9 K6 X, }3 m5 _4 g4 c
    public abstract void processDiscount(float discount);
    " X& ^- w8 ?$ g5 H' s7 w; q$ E. ~
    + t! J  P6 Q7 D6 R
        /**
    : c& I. ]0 t) {% G1 X
         * 创建PriceHandler的工厂方法
    . [/ `! J0 W* [/ K! H0 K
         *5 w; q4 q5 L9 ?! [/ g4 d& _
         * @return: ~3 k8 i6 O% X3 b7 |( R: d; P
    */% u' f' i( B4 d9 Y
    public static PriceHandler createPriceHandler() {
    3 Q, G) h5 y# t" @        PriceHandler sales = new Sales();
    6 Q7 O! W; _) C7 h" |
            PriceHandler man = new Manager();
    * T6 R% c& @0 {
            PriceHandler dir = new Director();9 B. \; A$ J( h3 K+ Q& Q  _
            PriceHandler ceo = new Ceo();+ g( n; Q. c* E9 Z& N
            sales.setSuccessor(man);! l( {. w4 h9 ]1 _: X
            man.setSuccessor(dir);9 l; H  G8 d" s4 D
            dir.setSuccessor(ceo);8 j7 X' F! |" P! P, Q$ i9 Z8 Y
            return sales;
    , c, ?& D/ q) V% c3 Z
        }
    + [% l# ?: U) y/ y; k}  ?' V9 B# h8 r; @
    , l; V1 w) d6 q0 S

    ( v/ l( [) [5 ?$ X& e" F, N9 L2、
    3 T# O$ b, ]3 m% x! A$ w1 a; |package com.javazx.cor.handler;" B) `: i+ q' l2 Q3 A8 m; E3 A

    0 k) }  Z. Y5 z* E1 d& P
    /**/ L; [0 X5 [- ^: W2 P2 o/ Q' ~
    * @author: itmrchen: P" z7 U9 c) W# b6 Z8 z; K
    * @Description: 销售 可以批准5%以内的折扣
    # i, j7 ~" i1 r9 Z1 T
    * @date 2019/8/1 1:19
    # m$ ]5 j' q: I
    */
    ) ?! p8 V" N/ N% {' n
    public class Sales extends PriceHandler {8 ~, c! l2 w- n3 c9 D
        @Override; }) _6 t, s% i# y. I2 i; M1 \/ a
        public void processDiscount(float discount) {: j$ `6 L, ~5 R# Y* Z8 M
            if (discount <= 0.05) {
    5 _* m( [) V. t            System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
    2 p$ U- l7 m7 ^2 R
            } else {- G1 c" I+ B- y) V' K2 ], [
                successor.processDiscount(discount);! `9 T6 d5 G0 R0 `. e/ T* z+ j
            }! X- }3 S6 r: _
        }
    2 ?2 x0 w$ M. T8 z3 J# m* \}
    " w3 y5 a. i0 q& q+ h6 @' J7 J: k/ p1 L/ n/ C) j9 h9 B" N
    3、5 g. S$ b2 ^% L! z
    package com.javazx.cor.handler;
    4 g& i/ b" I1 D; O, J) F2 N: P$ G
    : n( I( t( `' ~9 j  D. C% N# }
    /**+ I' ^  c1 l9 k4 J! R& N
    * @author: itmrchen
    / ~# ~. Y! q/ V0 L, @
    * @Description:销售经理可以批准30%以内的折扣+ B, o% i% x1 ]0 q' B% p
    * @date 2019/8/1 1:24
    - K" M8 B( O9 E) X. O
    *// F6 E( i4 a' |% m1 p1 D
    public class Manager extends PriceHandler {. _( }2 F4 }1 x) A8 K
        @Override8 j3 g2 G- U8 T8 H! s6 _
        public void processDiscount(float discount) {6 z* K9 E0 L- n: Y
            if (discount <= 0.3) {
    6 ~" }7 l5 ?/ M  V- {7 X            System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
    ! N+ E, @2 P+ m
            } else {$ T& c3 P# O" \* ?  ]) s
                successor.processDiscount(discount);
    8 R" j8 E- |3 V/ R; @( l
            }" b3 x# [4 V, C0 |! k; y$ K8 K, d
        }" w( ]  U1 t! X) t) o$ C
    }
    1 J1 _" z4 v- s0 h% }
    $ I$ W6 e4 f8 v8 R
    4、

    - [" e8 C0 }3 U" Q( ypackage com.javazx.cor.handler;) q# P# a+ S+ A$ q
    & X2 v2 u8 ?2 O" t; ]
    /**$ V$ T& P4 _' r: P4 W8 D6 v
    * @author: itmrchen
    / B9 C; D0 s0 {6 K+ V
    * @Description: 销售总监可以批准40%以内的折扣
    : M6 S4 @* x) T( V, q5 r  G: X8 J# R; |
    * @date 2019/8/1 1:26! |2 |$ J/ Q( v2 h7 C& [
    */
    % |0 T% r2 `  Y4 P
    public class Director extends PriceHandler {
    5 o* Y  T7 O# D/ j    @Override- o( {- z" e, ]- l: B/ @
        public void processDiscount(float discount) {
    + ^% y& O8 B. A        if (discount <= 0.4) {
    ) {- b# ^1 H0 Y( y            System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);
    6 K& _+ a: W8 M% O5 C
            } else {
    * b: M' T7 [' y# s0 B0 X+ M0 |0 E            successor.processDiscount(discount);+ l1 C4 B( r8 _* g1 i5 v/ Q, Z9 S
            }
    % ^9 G* {) Q0 B& N& M/ S% i    }
    ( @. u9 u$ D( Y: _% [}
    , w& a; r8 [- m! g6 r1 l
    4 x- C% p# A/ g/ Z$ \
    5、
    9 Q1 s! N/ K8 }6 Fpackage com.javazx.cor.handler;
    ' a6 P! U' _) A& \8 ~
    8 @* |" J- M: t3 u. W
    /**- L# ~9 M' k1 u) t7 V
    * @author: itmrchen3 h* F! ]1 w2 y0 m$ d: j+ t
    * @Description:CEO有权拒绝超过55%的折扣8 j4 Y* x2 x# g5 n
    * @date 2019/8/1 1:285 ]8 ~% ^# B" I0 i. B
    */
    0 `) G8 U" C  k6 l0 Y
    public class Ceo extends PriceHandler {
    ) D  z' c( n) _: Y" N$ C3 D    @Override
    1 O) v$ V9 A% \( V! A/ v
        public void processDiscount(float discount) {
    , r) E  o; o6 H& a, \* K9 j) ~        if (discount <= 0.55) {) u% y: ~; H& x9 s2 k4 ?
                System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);2 {5 T" k/ V9 _" v
            } else {
    6 n( k6 X) P% C" M! ]            System.out.format("%s拒绝了折扣:%.2f%n", this.getClass().getName(), discount);0 }5 J' F+ U. N6 P4 u/ |
            }* h6 k* J/ s; ~! h
        }+ z' k; j- X5 C8 T
    }
    ' S' N3 H5 ?/ {6 }
    ' |9 H8 v. ^8 Y6 |
    8 H5 j9 Q& @1 a* U/ m0 C7 T1 _
    6、* _' K- G. J( |8 S
    package com.javazx.cor;6 G$ z* R& Y8 q2 L; U

    : F; w8 @2 f/ ?0 Z
    import com.javazx.cor.handler.PriceHandler;2 U; g$ K% c4 C* a6 I7 z

    % N5 x6 ^( B' w9 u8 Z2 B
    /**
    / M. `4 L  F, ~) w% ]  r9 T
    * @author: itmrchen0 {8 }2 ?6 x( V! ?3 }/ J4 I, Z
    * @Description: 客户请求折扣- a8 [  t4 |# I3 p3 C
    * @date 2019/8/1 1:32# g0 }; B( O- q" o' O8 l
    */
    2 N5 _* {$ U! o* Y3 s- B/ U! x0 A
    public class Customer {
    ) A9 A( w3 O' x7 o7 ]% P) ~' z    private PriceHandler priceHandler;
    ! }8 g) ~' r3 S1 V2 L/ L( s

    # H& |' h( d6 ]8 P0 Y) [+ Z
        public void setPriceHandler(PriceHandler priceHandler) {
    # s6 q! ~  ~; t3 t! W. Q1 ^' ~4 D% i0 b        this.priceHandler = priceHandler;8 C, x, B, d$ X8 I* X' `
        }, P0 n0 @: K8 h6 z

    + ~" |' ~% ]9 C: [' L3 }  L    public void requestDiscount(float discount) {" V2 I! u6 y4 h# t
            priceHandler.processDiscount(discount);
    2 r4 Y* J" x$ y( P
        }0 j$ ?$ _% ?2 y" y- n
    9 j8 {0 `0 Y* T& W  D; G% z* R
        public static void main(String[] args) {0 c% c) Q; u4 V) N" s
            Customer customer = new Customer();
    ' _( P9 o1 I  B
            customer.setPriceHandler(PriceHandler.createPriceHandler());
    9 x8 `* Q, `' X. e9 c9 l
            customer.requestDiscount(0.01f);' e' m. p% J) z( s
        }- u6 V! s# K4 N- ~3 @
    }
    . F. x. i( N  Y* F# H7 _; y, c. w; n

    , w) L$ d8 I6 ~$ V3 s& _) P, \

    6 M4 R: r6 }6 y" m# K
    8 F% ^$ f# Q2 N- o
    9 }4 X5 s7 y8 h! w. Z) @: q) \
    6 D' X+ X4 R+ B! d$ sgithub地址:https://github.com/itmrchen/springPro   
    位置在 springPro\src\main\java\com\javazx\cor包下面9 n) ^$ C6 ]- o& c/ i
    6 ]/ B/ p7 P5 f( x; E1 Y6 W& m# c
    & h' n* g# `6 o1 v5 r" {  |
    ; u9 c7 r, O- o/ q; b& N

    1 [: u, r6 }% C6 |3 Y. y& v6 {7 [+ G4 V  l0 j) b
    回复

    使用道具 举报

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

    [LV.5]渐入佳境

    12

    主题

    4633

    帖子

    9802

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4503

    帖子

    9006

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4665

    帖子

    9332

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4536

    帖子

    9074

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4639

    帖子

    9280

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4618

    帖子

    9238

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4611

    帖子

    9222

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4577

    帖子

    9156

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4660

    帖子

    9322

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-3-26 10:37 , Processed in 0.471949 second(s), 33 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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