Java Reference
In-Depth Information
public final DoorState OPEN = new DoorOpen(this);
public final DoorState CLOSING = new DoorClosing(this);
public final DoorState STAYOPEN = new DoorStayOpen(this);
//
private DoorState state = CLOSED;
// ...
}
The abstract DoorState class requires subclasses to implement click() . This is consistent
with the state machine, in which every state has a click() transition. The DoorState class
stubs out other transitions, so that subclasses can override or ignore irrelevant messages:
public abstract class DoorState
{
protected Door_2 door;
public DoorState(Door_2 door)
{
this.door = door;
}
public abstract void click();
public void complete()
{
}
public String status()
{
String s = getClass().getName();
return s.substring(s.lastIndexOf('.') + 1);
}
public void timeout()
{
}
}
Note that the status() method works for all the states and is much simpler than its
predecessor before refactoring.
CHALLENGE 22.3
The new status() method returns a slightly different description of a door's state.
What's the difference?
The new design doesn't change the role of a Door object in receiving state changes from
the carousel. But now the Door_2 object simply passes these changes to its current state
object:
Search WWH ::




Custom Search