职责链模式(Java)

职责链模式(Java)

下面是关于我所写的所有设计模式代码(还是建议自己手打或者想一个别的例子练习一次)
(https://github.com/lihang212010/DesignPatterns-/tree/master/designpatterns/src)

职责链模式就类似平时工作,有小领导,大领导等诸多领导,每个人的职责权利也不相同,如下面这张图片,我们有经理和老板2种管理阶级,经理可以批准请假但不能批准涨工资,这就是一个典型的职责链
它有以下角色
● 抽象处理者(Handler)角色:定义出一个处理请求的接口。也就是管理人员
● 具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。,也就是经理和老板
(请求只是为了演示,它不属于职责链模式的成员)

职责链模式(Java)_第1张图片

代码如下

管理人员

public abstract class Controller {   //管理者抽象接口
protected String name;
protected Controller controller;
public Controller(String name) {
	this.name=name;
}
public void setController(Controller controller) {
	this.controller=controller;
}
public abstract void Response(Request request);
}

经理

public class Manager extends Controller{//经理

	public Manager(String name) {
		super(name);
	}

	@Override
	public void Response(Request request) {
		if(request.getRequest().equals("请假")) {
			System.out.println(name+"批准了请假");
		}
		else {
			System.out.println(name+"无权处理"+request.getRequest()+",将其报告给了上级");
			controller.Response(request);
		}	
	}  
}

老板

public class Boss extends Controller{

	public Boss(String name) {
		super(name);
	}

	@Override
	public void Response(Request request) {
		System.out.println(name+"批准了这个请求");
	}

}

请求

public class Request {         //请求
private String request;
public Request(String request) {
	this.request=request;
}
public String getRequest() {
	return request;
}
public void show() {
	System.out.println("提出"+request+":");
}
}

主方法

public class Main {

	public static void main(String[] args) {
		Manager manager=new Manager("经理");
		Boss boss=new Boss("老板");
		manager.setController(boss);
		Request request=new Request("请假");
		Request request2=new Request("涨工资");
		manager.Response(request);
		manager.Response(request2);
       
	}

}

结果
在这里插入图片描述

你可能感兴趣的:(设计模式)