`

设计模式之责任链模式

    博客分类:
  • 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.我要加班
分享到:
评论

相关推荐

    C++设计模式之职责链模式

    主要介绍了C++设计模式之职责链模式,本文讲解了什么是职责链模式、什么场合下使用、代码实例等内容,需要的朋友可以参考下

    JAVA设计模式之责任链模式详解

    主要介绍了JAVA设计模式之责任链模式详解,需要的朋友可以参考下

    学习JavaScript设计模式之责任链模式

    主要为大家介绍了JavaScript设计模式中的责任链模式,对JavaScript设计模式感兴趣的小伙伴们可以参考一下

    JS设计模式之责任链模式实例详解

    本文实例讲述了JS设计模式之责任链模式。分享给大家供大家参考,具体如下: 责任链设计模式: 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象...

    JavaScript设计模式之责任链模式实例分析

    本文实例讲述了JavaScript设计模式之责任链模式。分享给大家供大家参考,具体如下: 介绍 责任链模式(Chain of responsibility)是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将...

    JavaScript设计模式之职责链模式应用示例

    主要介绍了JavaScript设计模式之职责链模式,结合实例形式分析了javascript责任链模式的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下

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

    本文实例讲述了Android编程设计模式之责任链模式。分享给大家供大家参考,具体如下: 一、介绍 责任链模式(Iterator Pattern),是行为型设计模式之一。什么是”链“?我们将多个节点首尾相连所构成的模型称为链,...

    Java设计模式之责任链模式简介

    主要介绍了Java设计模式之责任链模式,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics