`

设计模式之责任链模式

    博客分类:
  • JAVA
阅读更多
刚学习了责任链模式,感觉还是蛮不错的,随手记录了下学习的内容。

责任链模式:责任链模式用于弱化请求发生者和请求处理者之间的关系。当多个对象都可以对请求进行处理,但不同的对象能处理的请求类型不同时,可以通过指向另一个对象的引用把这些对象连成一条责任链。当 Client 发出一个请求时,并不知道具体由哪个对象进行处理,它看到的只是一条责任链,将请求直接交给责任链,请求会在责任链中传递,直到找到一个能够进行处理的对象或者遍历结束找不到一个能够处理的对象为止。Java 语言中的异常处理机制就是责任链模式的一个典型应用例子。

下面模拟的是一个员工处理问题层次的责任链模式,不同级别的员工能处理不同级别的请求。

首先设计一个请求类:
package com.design.test.mode.responsibilityChain;

/**
 *  请求操作
 *  请求分级别,不同的级别需要不同层次的去处理一个请求
 * @author Share
 *
 */
public class Request {
	public static final int TYPE_1 = 1;
	public static final int TYPE_2 = 2;
	public static final int TYPE_3 = 3;
	public static final int TYPE_4 = 4;
	
	private int type;
	private String msg;
	
	public Request(int type,String msg){
		this.type=type;
		this.msg=msg;
	}
	
	public int getType() {
		return type;
	}

	public String getMsg() {
		return msg;
	}
}



设计员工的抽象类:
package com.design.test.mode.responsibilityChain;

/**
 *  定义一个员工抽象类
 *  一个员工有自己的上层,不同上层有处理问题的级别
 *  如果最上层都处理不了这问题,则无人能处理这问题。
 *  具体的员工类必须重写processRequest方法,才能见效
 * @author Share
 *
 */
public abstract class Employee {
	protected Employee boss;
	protected String name;
	protected int requestLevel;
	
	public Employee(Employee boss,String name){
		this.boss = boss;
		this.name = name;
	}
	
	public void processRequest(Request request){
		if(boss!=null){
			boss.processRequest(request);
		}else{
			System.out.println("Nobody can handle the request."+request.getMsg());
		}
	}
	
	
}



管理员员工类:
 package com.design.test.mode.responsibilityChain;

public class Manager extends Employee {

	public Manager(Employee boss, String name) {
		super(boss, name);
		requestLevel = Request.TYPE_1;
	}

	@Override
	public void processRequest(Request request) {
		if(request.getType() > requestLevel){
			System.out.println(this.name+" say: I can't handle the request. My boss will handle it.");
			super.processRequest(request);
		}else{
			System.out.println(this.name+" say: I can handle the request."+request.getMsg());
		}
	}
	
}




主管类:
package com.design.test.mode.responsibilityChain;

public class Director extends Employee {

	public Director(Employee boss, String name) {
		super(boss, name);
		requestLevel = Request.TYPE_2;
	}

	@Override
	public void processRequest(Request request) {
		if(request.getType() > requestLevel){
			System.out.println(this.name+" say: I can't handle the request. My boss will handle it.");
			super.processRequest(request);
		}else{
			System.out.println(this.name+" say: I can handle the request."+request.getMsg());
		}
	}
	
}


CEO类:
package com.design.test.mode.responsibilityChain;

public class CEO extends Employee {

	public CEO(Employee boss, String name) {
		super(boss, name);
		requestLevel = Request.TYPE_3;
	}

	@Override
	public void processRequest(Request request) {
		if(request.getType() > requestLevel){
			System.out.println(this.name+" say: I can't handle the request. My boss will handle it.");
			super.processRequest(request);
		}else{
			System.out.println(this.name+" say: I can handle the request."+request.getMsg());
		}
	}
	
}



测试类:
package com.design.test.mode.responsibilityChain;

public class Main {

	public static void main(String[] args) {
		CEO ceo = new CEO(null, "Jack Ceo");
		Director dir = new Director(ceo, "Sello Director");
		Manager manager = new Manager(dir, "Fewen Mananger");
		
		Request req1 = new Request(4, "我要加薪");
		Request req2 = new Request(2, "我要请假");
		Request req3 = new Request(1, "我要加班");
		
		System.out.println("处理请求1");
		manager.processRequest(req1);
		System.out.println("处理请求2");
		manager.processRequest(req2);
		System.out.println("处理请求3");
		manager.processRequest(req3);
	}
}



打印结果:

处理请求1
Fewen Mananger say: I can't handle the request. My boss will handle it.
Sello Director say: I can't handle the request. My boss will handle it.
Jack Ceo say: I can't handle the request. My boss will handle it.
Nobody can handle the request.我要加薪
处理请求2
Fewen Mananger say: I can't handle the request. My boss will handle it.
Sello Director say: I can handle the request.我要请假
处理请求3
Fewen Mananger say: I can handle the request.我要加班
分享到:
评论

相关推荐

    设计模式之职责链模式

    设计模式之职责链模式,这份文档以例子的形式讲诉了设计模式之职责链模式,希望可以帮助需要的人!

    java设计模式之责任链模式

    在“java设计模式之责任链模式”的主题中,我们可以深入探讨如何在实际项目中应用责任链模式,包括但不限于以下方面: 1. **代码结构优化**:通过责任链模式,可以使代码结构更加清晰,降低类间的耦合度。 2. **可...

    设计模式之责任链模式Java实现

    责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求为止。在Java中,我们可以通过接口和类的组合来实现这种模式。让我们深入探讨...

    设计模式之职责链模式(ChainOfResponsibilityPattern)

    职责链模式(ChainOfResponsibilityPattern)是一种行为设计模式,主要目的是通过建立一个处理请求的对象链,使得请求可以在链上的各个对象间传递,直到被某个对象处理。这种模式可以有效地解耦请求发起者和处理者,...

    设计模式之责任链模式源码

    责任链模式是设计模式中的一种行为模式,它允许在对象之间建立一条处理请求的链条,每个对象都包含对请求的处理逻辑,以及将请求传递给下一个对象的能力。这种模式使得请求可以在链上的对象之间传递,直到被某个对象...

    设计模式之责任链模式(Chain)

    责任链模式是一种行为设计模式,它的核心思想是将请求的发送者和接收者解耦,通过将多个处理对象串联成一个处理链,使得请求沿着这个链进行传递,直到被某个对象处理。这种模式使得系统更加灵活,可以在运行时动态...

    设计模式之责任链模式程序

    一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...

    设计模式:职责链模式

    总的来说,职责链模式是一种非常实用的设计模式,它提供了一种方式来组织和分配责任,使得系统在处理请求时具有更好的灵活性和可扩展性。在实际开发中,例如在事件驱动系统、消息传递系统以及命令模式的实现中,职责...

    Android编程设计模式之责任链模式详解

    责任链模式是一种行为设计模式,它的核心思想是将一系列处理请求的对象串联成一条链,当一个请求到来时,会沿着这条链逐个处理,直到某个对象能够处理该请求为止。这种模式有效地解耦了发送请求的客户端和具体的处理...

    c++-设计模式之责任链模式(Chain of Responsibility Pattern)

    责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许将请求的发送者和接收者解耦。通过将请求沿着处理链传递,直到有对象处理该请求为止,这种模式避免了请求发送者与具体处理者之间的紧...

    Java 23种设计模式17职责链模式.pdf

    ### Java设计模式详解:职责链模式 #### 行为型模式概述 行为型设计模式着重于定义对象间的职责分配及算法的抽象化。不同于结构型模式关注类和对象的组合,行为型模式更注重对象之间的交互与职责划分,强调的是在...

    设计模式 - 职责链模式(C++实例)

    职责链模式(Chain of Responsibility)是一种行为设计模式,它的核心思想是将一系列处理请求的对象组织成一条链,每个对象都包含对请求的处理或传递的责任。在C++中实现职责链模式,我们可以创建一个抽象处理器类,...

    Python设计模式之职责链模式原理与用法实例分析

    本文实例讲述了Python设计模式之职责链模式原理与用法。分享给大家供大家参考,具体如下: 职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系。将对象连成链并...

    Java 经典设计模式讲解以及项目实战

    2 责任链模式 3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版...

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    4. **责任链模式**:责任链模式是行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。在这个模式中,请求沿着处理者链进行传递,每个处理者都有机会处理请求,或者将请求传递...

    JAVA设计模式之行为模式 责任链模式和状态模式

    本篇将探讨两种重要的行为设计模式:责任链模式(Chain of Responsibility Pattern)和状态模式(State Pattern)。 **责任链模式**是一种使多个对象都有机会处理请求的模式,避免请求发送者与接收者之间的耦合。在...

Global site tag (gtag.js) - Google Analytics