Tasarım Modelleri - Durum Modeli

Durum modelinde, bir sınıf davranışı durumuna bağlı olarak değişir. Bu tür bir tasarım örüntüsü davranış örüntüsünün kapsamına girer.

Durum modelinde, çeşitli durumları temsil eden nesneler ve durum nesnesi değiştikçe davranışı değişen bir bağlam nesnesi yaratırız.

Uygulama

Biz oluşturmak için gidiyoruz Devlet bir eylem ve uygulama beton devlet sınıflarını tanımlayan bir arayüz Devlet arayüzü. Bağlam , bir Durum taşıyan bir sınıftır.

Demo sınıfımız StatePatternDemo , içinde bulunduğu durumun türüne bağlı olarak Bağlam davranışındaki değişikliği göstermek için Bağlam ve durum nesnelerini kullanacaktır.

Aşama 1

Bir arayüz oluşturun.

State.java

public interface State {
   public void doAction(Context context);
}

Adım 2

Aynı arayüzü uygulayan somut sınıflar oluşturun.

StartState.java

public class StartState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in start state");
      context.setState(this);	
   }

   public String toString(){
      return "Start State";
   }
}

StopState.java

public class StopState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in stop state");
      context.setState(this);	
   }

   public String toString(){
      return "Stop State";
   }
}

Aşama 3

Bağlam Sınıfı Oluşturun .

Context.java

public class Context {
   private State state;

   public Context(){
      state = null;
   }

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

   public State getState(){
      return state;
   }
}

4. adım

Durum değiştiğinde davranıştaki değişikliği görmek için Bağlamı kullanın .

StatePatternDemo.java

public class StatePatternDemo {
   public static void main(String[] args) {
      Context context = new Context();

      StartState startState = new StartState();
      startState.doAction(context);

      System.out.println(context.getState().toString());

      StopState stopState = new StopState();
      stopState.doAction(context);

      System.out.println(context.getState().toString());
   }
}

Adım 5

Çıkışı doğrulayın.

Player is in start state
Start State
Player is in stop state
Stop State