{"id":7877,"date":"2024-09-18T04:46:17","date_gmt":"2024-09-18T04:46:17","guid":{"rendered":"https:\/\/studysection.com\/blog\/?p=7877"},"modified":"2024-09-18T07:14:00","modified_gmt":"2024-09-18T07:14:00","slug":"chain-of-responsibility-pattern-in-c","status":"publish","type":"post","link":"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/","title":{"rendered":"Chain of Responsibility Pattern in C#"},"content":{"rendered":"<p>The Chain of Responsibility pattern in <a href=\"https:\/\/studysection.com\/blog\/mastering-memory-management-in-c-net-best-practices-and-pitfalls\/\">C#<\/a> is a behavioral design pattern where a request is passed through a chain of handlers. Each handler decides either to process the request or to pass it to the next handler in the chain until the request is handled. This pattern promotes loose coupling between senders and receivers of a request. When the code is run, each request is processed by the appropriate handler based on its content. If no handler can process the request, a message indicating that none of the handlers can handle is displayed.<\/p>\n<p><strong>The key components of this pattern are as follows:<\/strong><\/p>\n<p>1. <strong>Handler Interface (IHandler):<\/strong> This interface defines the common methods that all handlers in the chain must implement. It typically includes a method like `HandleRequest`.<\/p>\n<p>2. <strong>Concrete Handlers:<\/strong> These are the actual handler classes that implement the `IHandler` interface. Each concrete handler knows its successor (the next handler in the chain). They decide whether to handle the request or pass it to the next handler.<\/p>\n<p>3. <strong>Client:<\/strong> The client initiates the request and sends it to the first handler in the chain. It doesn&#8217;t need to know the specific handler that will process the request or how the chain is structured.<\/p>\n<p>Following is an example to illustrate how the Chain of Responsibility pattern works in C#:<\/p>\n<p><code><br \/>\nusing System;<br \/>\n<strong>\/\/ Request class<\/strong><br \/>\nclass Request<br \/>\n{<br \/>\npublic string Content { get; set; }<\/code><br \/>\n<code><br \/>\npublic Request(string content)<br \/>\n{<br \/>\nContent = content;<br \/>\n}<br \/>\n}<br \/>\n<strong>\/\/ Handler interface<\/strong><br \/>\ninterface IHandler<br \/>\n{<br \/>\nvoid HandleRequest(Request request);<br \/>\n}<br \/>\n<strong>\/\/ Concrete Handler 1<\/strong><br \/>\nclass ConcreteHandler1 : IHandler<br \/>\n{<br \/>\nprivate IHandler _nextHandler;<br \/>\n<\/code><br \/>\n<code><br \/>\npublic void SetNextHandler(IHandler handler)<br \/>\n{<br \/>\n_nextHandler = handler;<br \/>\n}<br \/>\npublic void HandleRequest(Request request)<br \/>\n{<br \/>\nif (request.Content.Contains(\"handler1\"))<br \/>\n{<br \/>\nConsole.WriteLine(\"Request handled by Handler 1\");<br \/>\n}<br \/>\nelse if (_nextHandler != null)<br \/>\n{<br \/>\n_nextHandler.HandleRequest(request);<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\nConsole.WriteLine(\"Request cannot be handled.\");<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n<\/code><\/p>\n<p><code><br \/>\n<strong>\/\/ Concrete Handler 2<\/strong><br \/>\nclass ConcreteHandler2 : IHandler<br \/>\n{<br \/>\nprivate IHandler _nextHandler;<\/code><br \/>\n<code><br \/>\npublic void SetNextHandler(IHandler handler)<br \/>\n{<br \/>\n_nextHandler = handler;<br \/>\n}<br \/>\npublic void HandleRequest(Request request)<br \/>\n{<br \/>\nif (request.Content.Contains(\"handler2\"))<br \/>\n{<br \/>\nConsole.WriteLine(\"Request handled by Handler 2\");<br \/>\n}<br \/>\nelse if (_nextHandler != null)<br \/>\n{<br \/>\n_nextHandler.HandleRequest(request);<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\nConsole.WriteLine(\"Request cannot be handled.\");<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n<\/code><br \/>\n<code><br \/>\n<strong>\/\/ Client code<\/strong><br \/>\nclass Client<br \/>\n{<br \/>\npublic static void Main(string[] args)<br \/>\n{<br \/>\n\/\/ Creating handlers<br \/>\nvar handler1 = new ConcreteHandler1();<br \/>\nvar handler2 = new ConcreteHandler2();<br \/>\n<\/code><br \/>\n<code><br \/>\n<strong>\/\/ Chain the handlers<\/strong><br \/>\nhandler1.SetNextHandler(handler2);<\/code><br \/>\n<code><br \/>\n<strong>\/\/ Creating requests<\/strong><br \/>\nvar request1 = new Request(\"This is a request for handler1\");<br \/>\nvar request2 = new Request(\"This is a request for handler2\");<br \/>\nvar request3 = new Request(\"This is a request that cannot be handled\");<br \/>\n<\/code><code><br \/>\n<strong>\/\/ Handling requests<\/strong><br \/>\nhandler1.HandleRequest(request1);<br \/>\nhandler1.HandleRequest(request2);<br \/>\nhandler1.HandleRequest(request3);<br \/>\n}<br \/>\n}<br \/>\n<\/code><br \/>\nIn the above example:<\/p>\n<p>&#8211; Request class representing the requests that need to be handled.<br \/>\n&#8211; IHandler interface is defined with a HandleRequest method, ensuring that all concrete handlers implement this method.<br \/>\n&#8211; Two concrete handlers, ConcreteHandler1 and ConcreteHandler2, implement the IHandler interface. Each handler checks if it can handle the request based on its content. If it can&#8217;t handle it, it passes the request to the next handler in the chain.<br \/>\n&#8211; In the Client class, we create instances of concrete handlers, chain them together, and then send requests to the first handler.<\/p>\n<p>This pattern helps achieve loose coupling between senders and receivers of a request, as the sender doesn&#8217;t need to know the specific receiver of this request. Additionally, it allows for dynamic modification of the chain during runtime.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Chain of Responsibility pattern in C# is a behavioral design pattern where a request is passed through a chain<\/p>\n","protected":false},"author":1,"featured_media":7881,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Chain of Responsibility Pattern in C#<\/title>\n<meta name=\"description\" content=\"The Chain of Responsibility pattern is a behavioral design pattern where a request is passed through a chain of handlers.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chain of Responsibility Pattern in C#\" \/>\n<meta property=\"og:description\" content=\"The Chain of Responsibility pattern is a behavioral design pattern where a request is passed through a chain of handlers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Posts on famous people, innovations and educational topics\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/studysection\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-18T04:46:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-18T07:14:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2024\/09\/Add-a-subheading82.png\" \/>\n\t<meta property=\"og:image:width\" content=\"940\" \/>\n\t<meta property=\"og:image:height\" content=\"788\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"admin-studysection-blog\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@studysection\" \/>\n<meta name=\"twitter:site\" content=\"@studysection\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin-studysection-blog\" \/>\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:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/\"},\"author\":{\"name\":\"admin-studysection-blog\",\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402\"},\"headline\":\"Chain of Responsibility Pattern in C#\",\"datePublished\":\"2024-09-18T04:46:17+00:00\",\"dateModified\":\"2024-09-18T07:14:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/\"},\"wordCount\":353,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/studysection.com\/blog\/#organization\"},\"articleSection\":[\"Learn and Grow\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/\",\"url\":\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/\",\"name\":\"Chain of Responsibility Pattern in C#\",\"isPartOf\":{\"@id\":\"https:\/\/studysection.com\/blog\/#website\"},\"datePublished\":\"2024-09-18T04:46:17+00:00\",\"dateModified\":\"2024-09-18T07:14:00+00:00\",\"description\":\"The Chain of Responsibility pattern is a behavioral design pattern where a request is passed through a chain of handlers.\",\"breadcrumb\":{\"@id\":\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/studysection.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chain of Responsibility Pattern in C#\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/studysection.com\/blog\/#website\",\"url\":\"https:\/\/studysection.com\/blog\/\",\"name\":\"Blog Posts on famous people, innovations and educational topics\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/studysection.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/studysection.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/studysection.com\/blog\/#organization\",\"name\":\"StudySection\",\"url\":\"https:\/\/studysection.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2021\/10\/studySection-logo.png\",\"contentUrl\":\"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2021\/10\/studySection-logo.png\",\"width\":920,\"height\":440,\"caption\":\"StudySection\"},\"image\":{\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/studysection\",\"https:\/\/twitter.com\/studysection\",\"https:\/\/www.instagram.com\/study.section\/\",\"https:\/\/www.linkedin.com\/company\/studysection\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402\",\"name\":\"admin-studysection-blog\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/054ac87a6874df1932004239cd8eab36?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/054ac87a6874df1932004239cd8eab36?s=96&d=mm&r=g\",\"caption\":\"admin-studysection-blog\"},\"url\":\"https:\/\/studysection.com\/blog\/author\/admin-studysection-blog\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Chain of Responsibility Pattern in C#","description":"The Chain of Responsibility pattern is a behavioral design pattern where a request is passed through a chain of handlers.","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:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/","og_locale":"en_US","og_type":"article","og_title":"Chain of Responsibility Pattern in C#","og_description":"The Chain of Responsibility pattern is a behavioral design pattern where a request is passed through a chain of handlers.","og_url":"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/","og_site_name":"Blog Posts on famous people, innovations and educational topics","article_publisher":"https:\/\/www.facebook.com\/studysection","article_published_time":"2024-09-18T04:46:17+00:00","article_modified_time":"2024-09-18T07:14:00+00:00","og_image":[{"width":940,"height":788,"url":"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2024\/09\/Add-a-subheading82.png","type":"image\/png"}],"author":"admin-studysection-blog","twitter_card":"summary_large_image","twitter_creator":"@studysection","twitter_site":"@studysection","twitter_misc":{"Written by":"admin-studysection-blog","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/#article","isPartOf":{"@id":"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/"},"author":{"name":"admin-studysection-blog","@id":"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402"},"headline":"Chain of Responsibility Pattern in C#","datePublished":"2024-09-18T04:46:17+00:00","dateModified":"2024-09-18T07:14:00+00:00","mainEntityOfPage":{"@id":"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/"},"wordCount":353,"commentCount":0,"publisher":{"@id":"https:\/\/studysection.com\/blog\/#organization"},"articleSection":["Learn and Grow"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/","url":"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/","name":"Chain of Responsibility Pattern in C#","isPartOf":{"@id":"https:\/\/studysection.com\/blog\/#website"},"datePublished":"2024-09-18T04:46:17+00:00","dateModified":"2024-09-18T07:14:00+00:00","description":"The Chain of Responsibility pattern is a behavioral design pattern where a request is passed through a chain of handlers.","breadcrumb":{"@id":"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/studysection.com\/blog\/chain-of-responsibility-pattern-in-c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/studysection.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Chain of Responsibility Pattern in C#"}]},{"@type":"WebSite","@id":"https:\/\/studysection.com\/blog\/#website","url":"https:\/\/studysection.com\/blog\/","name":"Blog Posts on famous people, innovations and educational topics","description":"","publisher":{"@id":"https:\/\/studysection.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/studysection.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/studysection.com\/blog\/#organization","name":"StudySection","url":"https:\/\/studysection.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/studysection.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2021\/10\/studySection-logo.png","contentUrl":"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2021\/10\/studySection-logo.png","width":920,"height":440,"caption":"StudySection"},"image":{"@id":"https:\/\/studysection.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/studysection","https:\/\/twitter.com\/studysection","https:\/\/www.instagram.com\/study.section\/","https:\/\/www.linkedin.com\/company\/studysection"]},{"@type":"Person","@id":"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402","name":"admin-studysection-blog","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/studysection.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/054ac87a6874df1932004239cd8eab36?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/054ac87a6874df1932004239cd8eab36?s=96&d=mm&r=g","caption":"admin-studysection-blog"},"url":"https:\/\/studysection.com\/blog\/author\/admin-studysection-blog\/"}]}},"views":142,"_links":{"self":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts\/7877"}],"collection":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/comments?post=7877"}],"version-history":[{"count":8,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts\/7877\/revisions"}],"predecessor-version":[{"id":7886,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts\/7877\/revisions\/7886"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/media\/7881"}],"wp:attachment":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/media?parent=7877"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/categories?post=7877"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/tags?post=7877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}