// state pattern -- structural example
using system;
namespace dofactory.gangoffour.state.structural
...{
// mainapp test application
class mainapp
...{
static void main()
...{
// setup context in a state
context c = new context(new concretestatea());
// issue requests, which toggles state
c.request();
// wait for user
console.read();
}
}
// "state"
abstract class state
public abstract void handle(context context);
// "concretestatea"
class concretestatea : state
public override void handle(context context)
context.state = new concretestateb();
// "concretestateb"
class concretestateb : state
context.state = new concretestatea();
// "context"
class context
private state state;
// constructor
public context(state state)
this.state = state;
// property
public state state
get...{ return state; }
set
...{
state = value;
console.writeline("state: " +
state.gettype().name);
}
public void request()
state.handle(this);
}