{"id":18148,"date":"2024-03-15T16:19:38","date_gmt":"2024-03-15T16:19:38","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/"},"modified":"2024-03-21T12:36:58","modified_gmt":"2024-03-21T12:36:58","slug":"how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/","title":{"rendered":"How to specify the execution order in a Java chain of responsibility pattern?"},"content":{"rendered":"<p>In the Java Chain of Responsibility pattern, the execution order can be specified using the following method:<\/p>\n<ol>\n<li>Define an abstract base class or interface for the responsibility chain, which includes a method for handling and another method for setting the next handler.<\/li>\n<li>The handling method is implemented in the specific handler class, and the responsibility chain is connected by setting the next handler method.<\/li>\n<li>Create specific handler objects in the client code and establish the next handler in a specified order.<\/li>\n<li>Invoke the handling method of the chain of responsibility, passing the request to the first handler.<\/li>\n<li>After each handler finishes processing the request, they can choose to pass the request to the next handler, or simply end the processing.<\/li>\n<\/ol>\n<p>Here is a simple example code:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-comment\">\/\/ \u5b9a\u4e49\u8d23\u4efb\u94fe\u7684\u62bd\u8c61\u57fa\u7c7b<\/span>\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">abstract<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Handler<\/span> {\r\n    <span class=\"hljs-keyword\">protected<\/span> Handler nextHandler;\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">setNextHandler<\/span><span class=\"hljs-params\">(Handler handler)<\/span> {\r\n        <span class=\"hljs-built_in\">this<\/span>.nextHandler = handler;\r\n    }\r\n\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">abstract<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">handleRequest<\/span><span class=\"hljs-params\">(String request)<\/span>;\r\n}\r\n\r\n<span class=\"hljs-comment\">\/\/ \u5177\u4f53\u7684\u5904\u7406\u8005\u7c7b<\/span>\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">ConcreteHandler1<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title class_\">Handler<\/span> {\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">handleRequest<\/span><span class=\"hljs-params\">(String request)<\/span> {\r\n        <span class=\"hljs-keyword\">if<\/span> (request.equals(<span class=\"hljs-string\">\"A\"<\/span>)) {\r\n            System.out.println(<span class=\"hljs-string\">\"ConcreteHandler1\u5904\u7406\u4e86\u8bf7\u6c42\uff1a\"<\/span> + request);\r\n        } <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (nextHandler != <span class=\"hljs-literal\">null<\/span>) {\r\n            nextHandler.handleRequest(request);\r\n        }\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">ConcreteHandler2<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title class_\">Handler<\/span> {\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">handleRequest<\/span><span class=\"hljs-params\">(String request)<\/span> {\r\n        <span class=\"hljs-keyword\">if<\/span> (request.equals(<span class=\"hljs-string\">\"B\"<\/span>)) {\r\n            System.out.println(<span class=\"hljs-string\">\"ConcreteHandler2\u5904\u7406\u4e86\u8bf7\u6c42\uff1a\"<\/span> + request);\r\n        } <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (nextHandler != <span class=\"hljs-literal\">null<\/span>) {\r\n            nextHandler.handleRequest(request);\r\n        }\r\n    }\r\n}\r\n\r\n<span class=\"hljs-comment\">\/\/ \u5ba2\u6237\u7aef\u4ee3\u7801<\/span>\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Client<\/span> {\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">main<\/span><span class=\"hljs-params\">(String[] args)<\/span> {\r\n        <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u5177\u4f53\u7684\u5904\u7406\u8005\u5bf9\u8c61<\/span>\r\n        <span class=\"hljs-type\">Handler<\/span> <span class=\"hljs-variable\">handler1<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">ConcreteHandler1<\/span>();\r\n        <span class=\"hljs-type\">Handler<\/span> <span class=\"hljs-variable\">handler2<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">ConcreteHandler2<\/span>();\r\n\r\n        <span class=\"hljs-comment\">\/\/ \u6309\u7167\u6307\u5b9a\u7684\u987a\u5e8f\u8bbe\u7f6e\u4e0b\u4e00\u4e2a\u5904\u7406\u8005<\/span>\r\n        handler1.setNextHandler(handler2);\r\n\r\n        <span class=\"hljs-comment\">\/\/ \u8c03\u7528\u8d23\u4efb\u94fe\u7684\u5904\u7406\u65b9\u6cd5<\/span>\r\n        handler1.handleRequest(<span class=\"hljs-string\">\"A\"<\/span>);\r\n        handler1.handleRequest(<span class=\"hljs-string\">\"B\"<\/span>);\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>In the above example, two specific handler objects are first created, then they are connected by setting the next handler method. Finally, the handle method of the chain is called to pass the request to the first handler. During the handling process, if a handler is able to process the request, it will do so and end; otherwise, the request is passed on to the next handler. This way, the handlers in the chain can be executed in the specified order.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Java Chain of Responsibility pattern, the execution order can be specified using the following method: Define an abstract base class or interface for the responsibility chain, which includes a method for handling and another method for setting the next handler. The handling method is implemented in the specific handler class, and the responsibility [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-18148","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to specify the execution order in a Java chain of responsibility pattern? - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to specify the execution order in a Java chain of responsibility pattern?\" \/>\n<meta property=\"og:description\" content=\"In the Java Chain of Responsibility pattern, the execution order can be specified using the following method: Define an abstract base class or interface for the responsibility chain, which includes a method for handling and another method for setting the next handler. The handling method is implemented in the specific handler class, and the responsibility [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T16:19:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T12:36:58+00:00\" \/>\n<meta name=\"author\" content=\"Jackson Davis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jackson Davis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/\"},\"author\":{\"name\":\"Jackson Davis\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350\"},\"headline\":\"How to specify the execution order in a Java chain of responsibility pattern?\",\"datePublished\":\"2024-03-15T16:19:38+00:00\",\"dateModified\":\"2024-03-21T12:36:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/\"},\"wordCount\":220,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/\",\"name\":\"How to specify the execution order in a Java chain of responsibility pattern? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T16:19:38+00:00\",\"dateModified\":\"2024-03-21T12:36:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to specify the execution order in a Java chain of responsibility pattern?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350\",\"name\":\"Jackson Davis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2fdb47d6df1226e92380d96973782572a97b0675d098bb914410dec348eb5d29?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2fdb47d6df1226e92380d96973782572a97b0675d098bb914410dec348eb5d29?s=96&d=mm&r=g\",\"caption\":\"Jackson Davis\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/jacksondavis\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to specify the execution order in a Java chain of responsibility pattern? - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/","og_locale":"en_US","og_type":"article","og_title":"How to specify the execution order in a Java chain of responsibility pattern?","og_description":"In the Java Chain of Responsibility pattern, the execution order can be specified using the following method: Define an abstract base class or interface for the responsibility chain, which includes a method for handling and another method for setting the next handler. The handling method is implemented in the specific handler class, and the responsibility [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T16:19:38+00:00","article_modified_time":"2024-03-21T12:36:58+00:00","author":"Jackson Davis","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Jackson Davis","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/"},"author":{"name":"Jackson Davis","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350"},"headline":"How to specify the execution order in a Java chain of responsibility pattern?","datePublished":"2024-03-15T16:19:38+00:00","dateModified":"2024-03-21T12:36:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/"},"wordCount":220,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/","name":"How to specify the execution order in a Java chain of responsibility pattern? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T16:19:38+00:00","dateModified":"2024-03-21T12:36:58+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-specify-the-execution-order-in-a-java-chain-of-responsibility-pattern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to specify the execution order in a Java chain of responsibility pattern?"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350","name":"Jackson Davis","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2fdb47d6df1226e92380d96973782572a97b0675d098bb914410dec348eb5d29?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2fdb47d6df1226e92380d96973782572a97b0675d098bb914410dec348eb5d29?s=96&d=mm&r=g","caption":"Jackson Davis"},"url":"https:\/\/www.silicloud.com\/blog\/author\/jacksondavis\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=18148"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18148\/revisions"}],"predecessor-version":[{"id":51808,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18148\/revisions\/51808"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=18148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=18148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=18148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}