CSC/ECE 517 Fall 2012/ch1b 2w41 dc: Difference between revisions
No edit summary |
No edit summary |
||
Line 14: | Line 14: | ||
=== Structure === | === Structure === | ||
Following is a general structure of a state pattern: | Following is a general structure of a state pattern<ref>http://www.cs.umd.edu/class/fall2002/cmsc433-0101/Lectures/designPatterns2.pdf</ref>: | ||
[[File:State structure 1.jpg]] | [[File:State structure 1.jpg]] | ||
Line 22: | Line 22: | ||
*State: Abstract base class of all ConcreteState classes. No state is defined in this class or its subclasses. | *State: Abstract base class of all ConcreteState classes. No state is defined in this class or its subclasses. | ||
*Concrete States: The concrete state classes implement the real functionality that will be used by the Context object. ConcreteState A, ConcreteState B etc. in the figure are the states of the Context and implement the Handle(). | *Concrete States: The concrete state classes implement the real functionality that will be used by the Context object. ConcreteState A, ConcreteState B etc. in the figure are the states of the Context and implement the Handle(). | ||
=== Example === | |||
One of the most common examples for State pattern is implementation of an alarm clock. This implementation has four states: Off, On, Snooze and Buzz. | |||
[[File:Alarm_state.png|200px|thumb|right|alt Alarm States]] | |||
Revision as of 21:04, 19 November 2012
State pattern and the related patterns
The State pattern allows an object to completely change its behavior and the change depends on its current internal state. Alternatively, a monolithic object's behavior is a function of its state, and it must change its behavior at run-time depending on that state. State pattern is closely related to Strategy pattern and Bridge pattern. We shall discuss the three patterns, their structures, advantages & disadvantages.
Description
State Pattern
The state pattern is behavioral as it defines how communication between classes or entities is controlled. It is used in programming to define the state of an object. This pattern, also called as object for states pattern <ref>http://en.wikipedia.org/wiki/State_pattern</ref>, allows the class of an object to change at runtime without changing the interface used to access the object or losing the current state. This change in class is abstracted with the use of a wrapper object or context.<ref>http://www.blackwasp.co.uk/State.aspx</ref>
Creating object oriented state machines is one of the uses of the state pattern. In this, the functionality of the object changes fundamentally according to its state. Using multiple concrete classes, each class inheriting from the same base class is an alternative to multiple number of 'if' or 'switch' statements.
Structure
Following is a general structure of a state pattern<ref>http://www.cs.umd.edu/class/fall2002/cmsc433-0101/Lectures/designPatterns2.pdf</ref>:
- Context: Used by the clients of the state pattern which do not access the state objects directly. It holds a ConcreteState object according to the current state.
- State: Abstract base class of all ConcreteState classes. No state is defined in this class or its subclasses.
- Concrete States: The concrete state classes implement the real functionality that will be used by the Context object. ConcreteState A, ConcreteState B etc. in the figure are the states of the Context and implement the Handle().
Example
One of the most common examples for State pattern is implementation of an alarm clock. This implementation has four states: Off, On, Snooze and Buzz.
References
<references/>