java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 21000|回复: 103

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

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

    [LV.Master]出神入化

    2061

    主题

    3719

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66587

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

    发表于 2019-8-1 01:55:51 | 显示全部楼层 |阅读模式
    《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 t
    public 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; e
    public 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# k
    public 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 [
    回复

    使用道具 举报

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

    [LV.5]渐入佳境

    12

    主题

    4509

    帖子

    9554

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4378

    帖子

    8756

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4524

    帖子

    9050

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4398

    帖子

    8798

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4484

    帖子

    8970

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4488

    帖子

    8978

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4472

    帖子

    8944

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4431

    帖子

    8864

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    4516

    帖子

    9034

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-22 21:26 , Processed in 0.145270 second(s), 33 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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