设计模式之职责链模式(JAVA实现)

学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式。

主要场景:

小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没有权限,交由总经理处理,最后,总经理处理了,不同意。

职责链的意思就是,如果没有处理该类请求的权限,交由具有更高权限的对象处理。依次类推

这里将处理对象抽象为Handler类,经理、总监等为继承Handler的具体处理类,同时模拟客户端Client向Handler对象发出请求

类图如下

下面为具体代码实现:

Handler.java

 1 /**
 2  * 抽象的处理类
 3  * @author GXF
 4  *
 5  */
 6 public abstract class Handler {
 7     public Handler successor;                            //后继者,或权限更高的对象
 8     public abstract void handleRequest(int request);    //处理客户端请求
 9
10     public void setSuccesor(Handler successor){            //设置后继者,或者更高权限的对象
11         this.successor = successor;
12     }
13
14 }

ConcreteHandler1.java

 1 /**
 2  * 具体处理类1
 3  * 处理请求范围在1~10之间的请求
 4  * @author GXF
 5  *
 6  */
 7 public class ConcreteHandler1 extends Handler {
 8
 9     @Override
10     public void handleRequest(int request) {
11         if(request >=0 && request <= 10){                //在自己的权限范围内,自己处理
12             System.out.println("ConcreteHandler1 handle request = " + request);
13         }
14         else if(successor != null){                        //超过自己的权限,如果有更高权限对象,交由其处理
15             successor.handleRequest(request);
16         }
17
18     }
19
20 }

ConcreteHandler2.java

 1 /**
 2  * 具体处理类
 3  * 处理reqeuest 10~20范围
 4  * @author GXF
 5  *
 6  */
 7 public class ConcreteHandler2 extends Handler {
 8
 9     @Override
10     public void handleRequest(int request) {
11         if(request > 10 && request <= 20){                    //处理权限范围内的请求
12             System.out.println("ConcreteHandler2 handle request = " + request);
13         }
14         else if(successor != null){                            //不能处理的请求,交由权限更高的处理对象处理
15             successor.handleRequest(request);
16         }
17     }
18
19 }

ConcreteHandler3.java

 1 /**
 2  * 具体处理类3
 3  * 处理request范围:20~30
 4  * @author GXF
 5  *
 6  */
 7 public class ConcreteHandler3 extends Handler {
 8
 9     @Override
10     public void handleRequest(int request) {
11         if(request > 20 && request <= 30){
12             System.out.println("ConcreteHandler3 handle request = " + request);
13         }
14         else if(successor != null){
15             successor.handleRequest(request);
16         }
17
18     }
19
20 }

Client.java

 1 /**
 2  * 职责链模式客户端
 3  * @author GXF
 4  *
 5  */
 6 public class Client {
 7
 8     public static void main(String args[]){
 9         //生成三个权限的处理者对象
10         Handler h1 = new ConcreteHandler1();
11         Handler h2 = new ConcreteHandler2();
12         Handler h3 = new ConcreteHandler3();
13
14         //设置职责链后继者
15         h1.setSuccesor(h2);
16         h2.setSuccesor(h3);
17
18          //生成1-30的数字,作为请求,交由handler处理
19         int requests[] = new int[30];
20
21         //初始化reqeusts数组
22         for(int i = 0; i < requests.length; i++){
23             requests[i] = i;
24         }
25
26         for(int i = 0 ; i < requests.length; i++){
27             h1.handleRequest(requests[i]);
28         }//for
29
30     }
31
32 }
时间: 2024-12-12 23:03:30

设计模式之职责链模式(JAVA实现)的相关文章

图解Java设计模式之职责链模式

图解Java设计模式之职责链模式 学校OA系统的采购审批项目 :需求是 传统方案解决OA系统审批,传统的设计方案 职责链模式基本介绍 职责链模式解决OA系统采购审批 职责链模式在SpringMVC框架应用的源码 职责链模式的注意事项和细节 学校OA系统的采购审批项目 :需求是 采购员采购教学器材1)如果金额 小于等于 5000,由教学主任审批 (0<=x<=5000)2)如果金额 小于等于 10000,由院长审批(5000 < x <= 10000)3)如果金额 小于等于 3000

java设计模式之职责链模式

[学习难度:★★★☆☆,使用频率:★★☆☆☆] "一对二","过","过"--这声音熟悉吗?你会想到什么?对!纸牌.在类似"斗地主"这样的纸牌游戏中,某人出牌给他的下家,下家看看手中的牌,如果要不起上家的牌则将出牌请求再转发给他的下家,其下家再进行判断.一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新的牌.在这个过程中,牌作为一个请求沿着一条链在传递,每一位纸牌的玩家都可以处理该请求.在设计模式中,我们也有一种专

JAVA设计模式之 职责链模式【Chain of Responsibility Pattern】

一.概述 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止.职责链模式是一种对象行为型模式. 核心在于引入一个抽象处理者类 二.适用场景 请求的链式处理,多个对象可以处理同一请求.但是具体由哪个对象来处理由运行时系统根据条件判断确定. 如请假业务场景: 三.UML类图 四.参与者 1.Handler(抽象处理者):它定义了一个处理请求的接口,一般设计为抽象类,由于不同的具体处理者处理请求的方式不同,因此在其中定义了

设计模式值职责链模式(行为型)

目录 一.行为型模式 二.职责链模式定义 三.职责链模式角色 四.简单实例 五.模式应用 一.行为型模式 介绍职责链模式之前先介绍一下行为型设计模式,因为按照GoF模式分类,职责链就是一种行为型设计模式.行为型设计模式就是主要表示类或者对象之间的关联关系,分为类行为型和对象行为型.类行为型一般都是通过类的继承或者多态等等方式实现.对象行为型就是通过对象的聚合等等关联实现. 二.职责链模式定义 职责链模式是一种对象行为型模式.根据"合成复用"原则,尽量使用关联来取代类继承,对象行为型可以

设计模式之职责链模式(Chain of Responsibility)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些详细的类的信息封装起来.第二,它们隐藏了这些类的实例是怎样被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,

深入理解JavaScript系列(38):设计模式之职责链模式

介绍 职责链模式(Chain of responsibility)是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 也就是说,请求以后,从第一个对象开始,链中收到请求的对象要么亲自处理它,要么转发给链中的下一个候选者.提交请求的对象并不明确知道哪一个对象将会处理它——也就是该请求有一个隐式的接受者(implicit receiver).根据运行时刻,任一候选者都可以响应相应的请求,候选者的数目是任意

设计模式之职责链模式

职责链模式 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合.将系统连成一条线,并沿着这条线传递请求,直到有一个对象处理他为止. Handler package com.hml.responsiblity; public abstract class Handler { protected Handler successor; public Handler getSuccessor() { return successor; } public void setSuccesso

大话设计模式笔记 职责链模式 中介者模式

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 优点:当客户提交一个请求是,请求是沿链传递直至有一个ConcreteHandler对象负责处理它. 接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构.结果是职责链可以简化对象的相互连接. 中介者模式(Mediator),用一个中介对象来封装一系列的对象交互.中介者使各对

行为型设计模式之职责链模式(Chain of Responsibility)

结构 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求. 可处理一个请求的对象集合应被动态指定. 1 using System; 2 3 abstract class Handler 4 { 5 protected Handler successorHand