Hepimiz mutlaka durum odaklı problemler ile karşı karşıya kalmışızdır. Yani bir nesne belirli durumlarda belirli işlemleri gerçekleştirip yine belirli bir yeni duruma geçer ve bu döngü uygulamanın süreci boyunca devam eder. Aslında ilk akla gelen bu durumların if – else veya switch – case yapıları ile sağlanmasıdır; fakat bu kontroller ile karmaşıklık artar ve bakım zorlaşır. Bunun yerine her durumun bir nesne haline getirilmesi ve uygun işlemleri tetiklemesi daha esnek ve sağlam bir mimari sunacaktır. Örneğimize bakalım.

package anajavatica.pattern.behavioral.state;public interface IState {

public void updateState(Editor editor);

public String stateInfo();

}

package anajavatica.pattern.behavioral.state;public class InitialState implements IState {

public void updateState(Editor editor) {
editor.setState(new DebugState());
}

@Override
public String stateInfo() {
return “Initial state”;
}

}

package anajavatica.pattern.behavioral.state;public class DebugState implements IState {

public void updateState(Editor editor) {
editor.debug();
editor.setState(new RunState());
}

@Override
public String stateInfo() {
return “Debug state”;
}

}

package anajavatica.pattern.behavioral.state;public class RunState implements IState {

public void updateState(Editor editor) {
editor.run();
editor.setState(new DebugState());
}

@Override
public String stateInfo() {
return “Run state”;
}

}

package anajavatica.pattern.behavioral.state;public class Editor {

private IState state = null;

public IState getState() {
return state;
}

public void setState(IState state) {
this.state = state;
}

public void debug() {
// do some progress…
System.out.println(“Editor in “.concat(getState().stateInfo()));
}

public void run() {
// do some progress…
System.out.println(“Editor in “.concat(getState().stateInfo()));
}

}

package anajavatica.pattern.behavioral.state;public class StateMain {

public static void main(String[] args) {

Editor editor = new Editor();
IState initialState = new InitialState();
IState debugState = new DebugState();
IState runState = new RunState();

initialState.updateState(editor);
debugState.updateState(editor);
runState.updateState(editor);
System.out.println(editor.getState().stateInfo());

}

}

Görüldüğü gibi editör nesnesi belirli durumlara geçmektedir. IState arayüzünü uygulayan sınıflar editör nesnesini kullanarak yeni durumları belirliyor ve gerekli metotları tetikliyor. Böylece yeni eklenecek durumlar için daha esnek bir yapı sağlamış olduk. Bol Java’ lı günler dileğiyle… 😀

No responses yet

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.