【Java面试高频-设计模式】- Java责任链模式
发布日期:2021-06-29 15:36:48 浏览次数:2 分类:技术文章

本文共 1939 字,大约阅读时间需要 6 分钟。

使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMeeOajr-1620870788045)(imgs\124.png)]

定义消息请求

// 定义请求class Request{
private RequestType type; private String name; public Request(RequestType type,String name) {
this.type = type; this.name = name; } public RequestType getType() {
return this.type; } public String getName() {
return this.name; }}// 定义请求类型enum RequestType{
TYPE1,TYPE2}

定义处理请求的抽象类

// 定义处理请求的接口,并且实现后继链(successor)abstract class Handler{
protected Handler successor ; public Handler(Handler successor ) {
this.successor = successor ; } // 处理请求的方法 protected abstract void handleRequest(Request request);}

定义处理请求的Handler

// 第一个处理者class HandlerOne extends Handler{
public HandlerOne(Handler handler) {
super(handler); } /** * 请求处理 */ @Override protected void handleRequest(Request request) {
if(request.getType()==RequestType.TYPE1) {
// 处理 System.out.println(request.getName() + " is handle by HandlerOne"); return; } //接着走传递 if(successor !=null) {
successor.handleRequest(request); } }}// 第二个处理者class HandlerTwo extends Handler{
public HandlerTwo(Handler successor ) {
super(successor ); // TODO Auto-generated constructor stub } @Override protected void handleRequest(Request request) {
// TODO Auto-generated method stub if(request.getType()==RequestType.TYPE2) {
System.out.println(request.getName() + " is handle by HandlerTwo"); return; } // 传递 if(successor!=null) {
successor.handleRequest(request); } }}

测试主函数

public class Chain_Of_Responsibility {
public static void main(String[] args) {
// 生成处理者 Handler handler1 = new HandlerOne(null); Handler handler2 = new HandlerTwo(handler1); // 消息 Request message1 = new Request(RequestType.TYPE1, "message1"); Request message2 = new Request(RequestType.TYPE2, "message2"); //注意调用的时候是最后来调用 handler1.handleRequest(message1); handler2.handleRequest(message2); }}

转载地址:https://codingchaozhang.blog.csdn.net/article/details/116737999 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Java面试高频-设计模式】- Java装饰者模式是什么?
下一篇:【Java面试高频-设计模式】-Java工厂模式什么?简单工厂?工厂方式模式?抽象工厂模式?

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月04日 18时37分51秒