<< Chapter < Page | Chapter >> Page > |
In programming, it is often necessary to have objects with which one can store data, retrieve data when needed, and remove data when no longer needed. Such objects are instances of what we call container structures.
A mutable container structure is a system that may change its state from empty to non-empty, and vice-versa. For example, an empty container changes its state to non-empty after insertion of an object; and when the last element of a container is removed, its changes its state to empty. Figure 1 below diagrams the state transition of a container structure.
For each distinct state, the algorithms to implement the methods differ. For example, the algorithm for the retrieve method is trivial in the empty state -it simply returns null- while it is more complicated in the non-empty state. The system thus behaves as if it changes classes dynamically. This phenomenon is called “dynamic reclassification.” The state pattern is a design solution for languages that do not directly support dynamic reclassification. This pattern can be summarized as follow.
Below is the UML class diagram for the state design pattern .
A mutable linear recursive structure (
LRStruct
) can be in the empty state or in a non-empty state. If it is empty, it contains no object. Otherwise, it contains an object called
first , and a
LRStruct
object called
rest . When we insert a data object into an empty
LRStruct
, it changes it state to non-empty. When we remove the last element from an non-empty
LRStruct
, it changes its state to empty. We model a
LRStruct
using the state pattern, and as in the case of the
immutable list, we also apply the visitor pattern to obtain a
framework . Below is the UML class diagram of the
LRStruct
framework. Because of the current limitation of our diagramming tool, we are using the
Object[] input
notation to represent the variable argument list
Object... input
.
Click here to download the code .
Click here to download the javadoc documentation. . We will study the implementation code in the next lecture.
Notification Switch
Would you like to follow the 'Principles of object-oriented programming' conversation and receive update notifications?