{"id":5557,"date":"2022-01-31T04:45:03","date_gmt":"2022-01-31T04:45:03","guid":{"rendered":"https:\/\/studysection.com\/blog\/?p=5557"},"modified":"2022-01-31T06:11:16","modified_gmt":"2022-01-31T06:11:16","slug":"state-design-pattern","status":"publish","type":"post","link":"https:\/\/studysection.com\/blog\/state-design-pattern\/","title":{"rendered":"State Design Pattern"},"content":{"rendered":"<p>The state model (<strong>also known as the state design model<\/strong>) is one of the behavior models. It defines a way to control communication between classes or entities. It is used to modify the behavior of the object when the internal state of the object is changed. The pattern helps objects change state without changing the interface (<strong>used to access the object<\/strong>) or losing the current state. This change in the state of the class or object is masked from the outside world using a context (<strong>also known as a wrapper object<\/strong>). The state model can be used to implement complex decision algorithms represented as a flowchart or state diagram. A state model can also be implemented when there are different states and each state has a specific action.<\/p>\n<h2>Structure<\/h2>\n<p>The Diagram of the State Pattern:<br \/>\n<img decoding=\"async\" src=\"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2022\/01\/flow-chart-1.png\" alt=\"flow-chart\" \/><br \/>\nStateBase is the base class for all concrete states. It can be an abstract class or an interface The concrete class (State A, State B, and State C) has characteristics that can be used to modify and maintain the behavior of the context object.<br \/>\n<img decoding=\"async\" src=\"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2022\/01\/flow-chart1-2.png\" alt=\"flow-chart1\" \/><\/p>\n<p>The basic code structure of the state design model implementation uses C #. the initial state of the context is passed through a constructor. A Context &#8220;Request&#8221; method is used to change states internally, it is called the <strong>StateBase.Chage ()<\/strong> method. The StateBase.Chage () method changes the state of the context object to the next state. In this example, the state change sequence is as follows.<\/p>\n<p>The State Design <a href=\"https:\/\/studysection.com\/blog\/repository-pattern-in-c\/\">Pattern <\/a> allows us to modify the behavior of an object when its internal state changes. Using the State Design Pattern makes it much easier to keep track of all possible conditions (or states) and this ensures that our application will behave less undefined. There are also many other ways to implement a state model. Designing an effective state model requires the designer to make a list of possible states and relate each state to each other or it can be said to define a sequence of states to be modified.<br \/>\n<code>static void Main(string[] args)<br \/>\n{<br \/>\n    \/\/ create a Context object and supply the current state or initial state (state A).<br \/>\n\tContext context = new Context(new StateA());<br \/>\n    \/\/Change state requests from A to B.<br \/>\n\tcontext.Request();<br \/>\n    \/\/Change state requests from B to C.<br \/>\n\tcontext.Request();<br \/>\n    \/\/Change state requests from C to A.<br \/>\n\tcontext.Request();<br \/>\n}<br \/>\npublic interface StateBase<br \/>\n{<br \/>\n    void ChangeState(Context context);<br \/>\n}<br \/>\npublic class StateA: StateBase<br \/>\n{<br \/>\n    public void ChangeState(Context context)<br \/>\n\t{<br \/>\n        \/\/Change state of context from A to B.<br \/>\n    \tcontext.State = new StateB();<br \/>\n    \tConsole.WriteLine(\"Change state from A to B.\");<br \/>\n\t}<br \/>\n}<br \/>\npublic class StateB : StateBase<br \/>\n{<br \/>\n    public void ChangeState(Context context)<br \/>\n\t{<br \/>\n        \/\/Change state of context from B to C.<br \/>\n    \tcontext.State = new StateC();<br \/>\n    \tConsole.WriteLine(\"Change state from B to C.\");<br \/>\n\t}<br \/>\n}<br \/>\npublic class StateC : StateBase<br \/>\n{<br \/>\n    public void ChangeState(Context context)<br \/>\n\t{<br \/>\n        \/\/Change state of context from C to A.<br \/>\n    \tcontext.State = new StateA();<br \/>\n    \tConsole.WriteLine(\"Change state from C to A.\");<br \/>\n\t}<br \/>\n}<\/code><\/p>\n<h3>Client Code<\/h3>\n<p><code>public class Context<br \/>\n{<br \/>\n    public ChangeState(StateBase state)<br \/>\n\t{<br \/>\n    \tState = state;<br \/>\n    \tConsole.WriteLine(\"Create object of context class with first State.\");<br \/>\n\t}<br \/>\n    public StateBase State { get; set; }<br \/>\n    \/\/\/ &lt;summary><br \/>\n    \/\/\/ State change request<br \/>\n    \/\/\/ &lt;\/summary><br \/>\n    public void Request()<br \/>\n\t{<br \/>\n    \tState.Change(this);<br \/>\n\t}<br \/>\n}<\/code><\/p>\n<p><small><em>The English language is the most widely used language as a medium of communication around the world. Having a certification for the English language can be an advantage. StudySection provides an <a href=\"https:\/\/www.studysection.com\/english-language-advanced-diploma\">English Certification Exam<\/a> that tests English language proficiency in English grammar, reading, and writing.<\/em><\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The state model (also known as the state design model) is one of the behavior models. It defines a way<\/p>\n","protected":false},"author":1,"featured_media":5558,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[757,758],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>State Design Pattern - StudySection Blog<\/title>\n<meta name=\"description\" content=\"The state model is one of the behavior models. It defines a way to control communication between classes or entities.\" \/>\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\/state-design-pattern\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"State Design Pattern - StudySection Blog\" \/>\n<meta property=\"og:description\" content=\"The state model is one of the behavior models. It defines a way to control communication between classes or entities.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/studysection.com\/blog\/state-design-pattern\/\" \/>\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=\"2022-01-31T04:45:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-31T06:11:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2022\/01\/State-Design.png\" \/>\n\t<meta property=\"og:image:width\" content=\"300\" \/>\n\t<meta property=\"og:image:height\" content=\"200\" \/>\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=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/studysection.com\/blog\/state-design-pattern\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/studysection.com\/blog\/state-design-pattern\/\"},\"author\":{\"name\":\"admin-studysection-blog\",\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402\"},\"headline\":\"State Design Pattern\",\"datePublished\":\"2022-01-31T04:45:03+00:00\",\"dateModified\":\"2022-01-31T06:11:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/studysection.com\/blog\/state-design-pattern\/\"},\"wordCount\":387,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/studysection.com\/blog\/#organization\"},\"keywords\":[\"Design\",\"Pattern\"],\"articleSection\":[\"Learn and Grow\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/studysection.com\/blog\/state-design-pattern\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/studysection.com\/blog\/state-design-pattern\/\",\"url\":\"https:\/\/studysection.com\/blog\/state-design-pattern\/\",\"name\":\"State Design Pattern - StudySection Blog\",\"isPartOf\":{\"@id\":\"https:\/\/studysection.com\/blog\/#website\"},\"datePublished\":\"2022-01-31T04:45:03+00:00\",\"dateModified\":\"2022-01-31T06:11:16+00:00\",\"description\":\"The state model is one of the behavior models. It defines a way to control communication between classes or entities.\",\"breadcrumb\":{\"@id\":\"https:\/\/studysection.com\/blog\/state-design-pattern\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/studysection.com\/blog\/state-design-pattern\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/studysection.com\/blog\/state-design-pattern\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/studysection.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"State Design Pattern\"}]},{\"@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":"State Design Pattern - StudySection Blog","description":"The state model is one of the behavior models. It defines a way to control communication between classes or entities.","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\/state-design-pattern\/","og_locale":"en_US","og_type":"article","og_title":"State Design Pattern - StudySection Blog","og_description":"The state model is one of the behavior models. It defines a way to control communication between classes or entities.","og_url":"https:\/\/studysection.com\/blog\/state-design-pattern\/","og_site_name":"Blog Posts on famous people, innovations and educational topics","article_publisher":"https:\/\/www.facebook.com\/studysection","article_published_time":"2022-01-31T04:45:03+00:00","article_modified_time":"2022-01-31T06:11:16+00:00","og_image":[{"width":300,"height":200,"url":"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2022\/01\/State-Design.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":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/studysection.com\/blog\/state-design-pattern\/#article","isPartOf":{"@id":"https:\/\/studysection.com\/blog\/state-design-pattern\/"},"author":{"name":"admin-studysection-blog","@id":"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402"},"headline":"State Design Pattern","datePublished":"2022-01-31T04:45:03+00:00","dateModified":"2022-01-31T06:11:16+00:00","mainEntityOfPage":{"@id":"https:\/\/studysection.com\/blog\/state-design-pattern\/"},"wordCount":387,"commentCount":0,"publisher":{"@id":"https:\/\/studysection.com\/blog\/#organization"},"keywords":["Design","Pattern"],"articleSection":["Learn and Grow"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/studysection.com\/blog\/state-design-pattern\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/studysection.com\/blog\/state-design-pattern\/","url":"https:\/\/studysection.com\/blog\/state-design-pattern\/","name":"State Design Pattern - StudySection Blog","isPartOf":{"@id":"https:\/\/studysection.com\/blog\/#website"},"datePublished":"2022-01-31T04:45:03+00:00","dateModified":"2022-01-31T06:11:16+00:00","description":"The state model is one of the behavior models. It defines a way to control communication between classes or entities.","breadcrumb":{"@id":"https:\/\/studysection.com\/blog\/state-design-pattern\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/studysection.com\/blog\/state-design-pattern\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/studysection.com\/blog\/state-design-pattern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/studysection.com\/blog\/"},{"@type":"ListItem","position":2,"name":"State Design Pattern"}]},{"@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":425,"_links":{"self":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts\/5557"}],"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=5557"}],"version-history":[{"count":2,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts\/5557\/revisions"}],"predecessor-version":[{"id":5563,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts\/5557\/revisions\/5563"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/media\/5558"}],"wp:attachment":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/media?parent=5557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/categories?post=5557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/tags?post=5557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}