stateパターンは状態を表すクラスを導入することによって、状態に応じた処理を実行させるパターンです。
通常はif文等で状態を表す変数を評価して判断しますが、これをクラスに置き換えて処理するものです。
package com.example.state;
import java.text.SimpleDateFormat;
public interface State {
	public final static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
	
	public void setState(Context context);
	public void methodA();
	public void methodB();
}
package com.example.state;
public class ConcreteState1 implements State {
	private final static State state = new ConcreteState1();
	private ConcreteState1() {
		super();
	}
	
	public static State getInstance() {
		return state;
	}
	
	public void setState(Context context) {
		int value = context.getValue();
		if(value == 1) {
			context.changeState(ConcreteState2.getInstance());
		}
	}
	public void methodA() {
		
	}
	public void methodB() {
		
	}
}
package com.example.state;
public class ConcreteState2 implements State{
	private final static State state = new ConcreteState2();
	
	private ConcreteState2() {
		super();
	}
	
	public static State getInstance() {
		return state;
	}
	
	public void setState(Context context) {
		int value = context.getValue();
		if(value == 2) {
			context.changeState(ConcreteState1.getInstance());
		}
	}
	public void methodA() {
	}
	public void methodB() {
	}
}
package com.example.state;
public class Context {
	private int value;
	private State state = ConcreteState2.getInstance();
	
	public int getValue() {
		return value;
	}
	
	public void setValue(int value) {
		this.value = value;
		state.setState(this);
	}
	
	public void changeState(State state) {
		this.state = state;
	}
	
	public void methodA() {
		state.methodA();
	}
	
	public void methodB() {
		state.methodB();
	}
}
package com.example.state;
public class Main {
	public static void main(String args[]) {
		Context context = new Context();
		
		context.setValue(1);
		context.methodA();
		context.methodB();
		context.setValue(2);
		context.methodA();
		context.methodB();
	}
}
設定した値に応じてcontextに保持するクラスのインスタンスを保持し、
その状態に応じて実行する処理を、クラスの実装で処理を変更させています。