Java: Chain of Responsibility Pattern

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 责任链模式 Chain of Responsibility Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc Player.java
 * Interface
 * Record
 * Annotation
 * Enum
 * */
 
 
package com.javapatterns.chainofresponsibility;
 
 
/**
 *抽象 护花者
 *
 *
 * */
abstract public class Player {
 
    /**
     *请求处理方法
     *
     * */
    abstract public void handle(int i);
    /**
     *
     *
     * */
    private Player successor;
    /**
     *
     *
     * */
    public Player()
    {
        successor = null;
    }
    /**
     *赋值方法 调用此方法设定下家
     *
     * */
    public void setSuccessor(Player aSuccessor)
    {
        successor = aSuccessor;
    }
    /**
     *公开方法,将“花”传给下家,如果没有下家,停止运行
     *
     * */
    public void next(int index)
    {
        if( successor != null )
        {
            successor.handle(index);
        }
        else
        {
            System.out.println("Program terminated.");
            System.exit(0);
        }
    }
 
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 责任链模式 Chain of Responsibility Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc JiaMu.java
 * Interface
 * Record
 * Annotation
 * Enum
 * */
 
package com.javapatterns.chainofresponsibility;
 
/**
 *贾母
 *
 * */
public class JiaMu extends Player{
 
    /**
     *以下家为参量
     *
     * */
 
    public JiaMu(Player aSuccessor)
    {
        this.setSuccessor(aSuccessor);
    }
 
    public JiaMu()
    {
 
    }
    /**
     *
     *
     *
    public void  setSuccessor(Player aSuccessor)
    {
        this.setSuccessor(aSuccessor);
 
    }*/
 
    /**
     *请求处理方法
     *
     * */
    public void handle(int i)
    {
        if( i == 1 )
        {
            System.out.println("Jia Mu gotta drink!");
        }
        else
        {
            System.out.println("Jia Mu passed!");
            next(i);
        }
    }
 
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 责任链模式 Chain of Responsibility Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc JiaShe.java
 * Interface
 * Record
 * Annotation
 * Enum
 * */
 
 
package com.javapatterns.chainofresponsibility;
 
/**
 *贾赦
 *
 * */
public class JiaShe  extends Player{
 
    /**
     *
     *
     * */
    public JiaShe(Player aSuccessor)
    {
        this.setSuccessor(aSuccessor);
    }
    /**
     *
     *
     * */
    public void handle(int i)
    {
        if( i == 2 )
        {
            System.out.println("Jia She gotta drink!");
        }
        else
        {
            System.out.println("Jia She passed!");
            next(i);
        }
    }
 
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 责任链模式 Chain of Responsibility Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc JiaZheng.java
 * Interface
 * Record
 * Annotation
 * Enum
 * */
 
 
package com.javapatterns.chainofresponsibility;
 
/**
 *贾政
 *
 * */
public class JiaZheng  extends Player{
 
    public JiaZheng(Player aSuccessor)
    {
        this.setSuccessor(aSuccessor);
    }
    /**
     *
     *
     * */
    public void handle(int i)
    {
        if( i == 3 )
        {
            System.out.println("Jia Zheng gotta drink!");
        }
        else
        {
            System.out.println("Jia Zheng passed!");
            next(i);
        }
    }
 
 
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 责任链模式 Chain of Responsibility Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc JiaHuan.java
 * Interface
 * Record
 * Annotation
 * Enum
 * */
 
package com.javapatterns.chainofresponsibility;
 
/**
 *贾环
 *
 * */
public class JiaHuan extends Player{
 
    /**
     *
     *
     * */
    public JiaHuan(Player aSuccessor)
    {
        this.setSuccessor(aSuccessor);
    }
    /**
     *
     *
     * */
    public void handle(int i)
    {
        if( i == 5 )
        {
            System.out.println("Jia Bao Yu gotta drink!");
        }
        else
        {
            System.out.println("Jia Bao Yu passed!");
            next(i);
        }
    }
 
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 责任链模式 Chain of Responsibility Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc JiaBaoYu.java
 * Interface
 * Record
 * Annotation
 * Enum
 * */
 
package com.javapatterns.chainofresponsibility;
 
/**
 *贾宝玉
 *
 * */
public class JiaBaoYu  extends Player{
 
    /**
     *贾宝玉
     *
     * */
    public JiaBaoYu(Player aSuccessor)
    {
        this.setSuccessor(aSuccessor);
    }
    /**
     *
     *
     * */
    public void handle(int i)
    {
        if( i == 4 )
        {
            System.out.println("Jia Bao Yu gotta drink!");
        }
        else
        {
            System.out.println("Jia Bao Yu passed!");
            next(i);
        }
    }
 
 
}

 

调用试试:

1
2
3
4
5
6
7
8
9
10
//责任链模式
           JiaMu jiaMu = new JiaMu(null);
                   jiaMu.setSuccessor( new JiaShe (
                   new JiaZheng(
                           new JiaBaoYu(
                                   new JiaHuan( jiaMu ) ) ) ) );
 
           firstPlayer = jiaMu;
 
           firstPlayer.handle(4);

  

输出:

1
2
3
4
Jia Mu passed!
Jia She passed!
Jia Zheng passed!
Jia Bao Yu gotta drink!

  

 

posted @   ®Geovin Du Dream Park™  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2021-09-26 Dynamically create a div element with JavaScript/jQuery
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示