Java Design Patterns State
State Overview
An object appears to change its' class when the class it passes calls through to switches itself for a related class.
DvdStateContext.java - the Context
public class DvdStateContext {
private DvdStateName dvdStateName;
public DvdStateContext() {
setDvdStateName(new DvdStateNameStars());
//start with stars
}
public void setDvdStateName(DvdStateName dvdStateNameIn) {
this.dvdStateName = dvdStateNameIn;
}
public void showName(String nameIn) {
this.dvdStateName.showName(this, nameIn);
}
}
download source, use right-click and "Save Target As..." to save with a .java extension.
DvdStateName.java - the State interface
public interface DvdStateName {
public void showName(DvdStateContext dvdStateContext,
String nameIn);
}
download source, use right-click and "Save Target As..." to save with a .java extension.
DvdStateNameExclaim.java - one of two Concrete States
public class DvdStateNameExclaim implements DvdStateName {
public DvdStateNameExclaim() {}
public void showName(DvdStateContext dvdStateContext,
String nameIn) {
System.out.println(nameIn.replace(' ','!'));
//show exclaim only once, switch back to stars
dvdStateContext.setDvdStateName(new DvdStateNameStars());
}
}
download source, use right-click and "Save Target As..." to save with a .java extension.
DvdStateNameStars.java - two of two Concrete States
public class DvdStateNameStars implements DvdStateName {
int starCount;
public DvdStateNameStars() {
starCount = 0;
}
public void showName(DvdStateContext dvdStateContext,
String nameIn) {
System.out.println(nameIn.replace(' ','*'));
// show stars twice, switch to exclamation point
if (++starCount > 1) {
dvdStateContext.setDvdStateName(
new DvdStateNameExclaim());
}
}
}
download source, use right-click and "Save Target As..." to save with a .java extension.
TestState.java - testing the State
class TestState {
public static void main(String[] args)
{
DvdStateContext stateContext = new DvdStateContext();
stateContext.showName(
"Sponge Bob Squarepants - "+
"Nautical Nonsense and Sponge Buddies");
stateContext.showName(
"Jay and Silent Bob Strike Back");
stateContext.showName(
"Buffy The Vampire Slayer Season 2");
stateContext.showName(
"The Sopranos Season 2");
}
}
download source, use right-click and "Save Target As..." to save with a .java extension.
Test Results
Sponge*Bob*Squarepants*-*Nautical*Nonsense*and*Sponge*Buddies Jay*and*Silent*Bob*Strike*Back Buffy!The!Vampire!Slayer!Season!2 The*Sopranos*Season*2
UML
References
| Comments |
| Sign in to be the first to comment on Java Design Patterns State. |