オブジェクトの内部状態が変化した時に、オブジェクトが振舞いを変えるようにする。クラス内では、振舞いの変化を記述せず、状態を表すオブジェクトを導入することでこれを実現する。

抽象クラス State へのアブストラクトメソッド追加により、あとからオペレーションを追加できる。
あらかじめ予想されていなかったオペレーションを追加することが可能になる。すべての ConcreteState クラスに、追加されたオペレーションを実装する補完モジュールが必要になる。

module original {
define class Context {
State state;
define void request(){
state.handle();
}
}
define abstract class State {
define abstract void handle();
}
define class ConcreteStateA extends State {
void handle(){...}
}
define class ConcreteStateB extends State {
void handle(){...}
}
}
module extension extends original {
class State {
define abstract void newOperation();
}
class ConcreteStateA {
void newOperation(){...}
}
class ConcreteStateB {
void newOperation(){...}
}
}