State Pattern

Das State Pattern (siehe Design Pattern) wird benutzt, wenn ein Objekt sein Verhalten ändert, wenn sich sein innerer Zustand ändert. Bei diesem Pattern wird Delegation mit einem Zielobjekt (State) verwendet, das sich mit dem Zustand des Quellobjekts (Context) ändert.

public class Context
{
  private State state;
  //
  public Context()
  {
    super();
    //
    state = new State1();
  }
  //
  public void doSomething()
  {
    state.doSomething();
  }
  //
  public void changeStateTo1()
  {
    state = new State1();
  }
  //
  public void changeStateTo2()
  {
    state = new State2();
  }
}

public interface State
{
  public void doSomething();
}

public class State1 implements State
{
  public State1()
  {
    super();
  }
  //
  public void doSomething()
  {
    ...
  }
}

public class State2 implements State
{
  public State2()
  {
    super();
  }
  //
  public void doSomething()
  {
    ...
  }
}

Einige Programmiersprachen erlauben es, den gleichen Effekt mit anderen Mitteln zu erreichen:

- In Common Lisp kann die Klasse eines Objekts geändert werden.
- In Self, einer klassenlosen, prototyp-basierten Sprache kann die Vererbung dynamisch geändert werden (Zuweisung eines anderen Parents).