Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

Design Pattern - State



  May 05, 2019    Labels:,,,,,,,, 

Eğer sistemimizde içinde bulunduğu duruma göre farklı davranış sergilemesi gereken bir sınıf var ise State Pattern'ını kullanmalıyız. Bu patern bulunduğu duruma göre farklı hareket eden nesneler için bir kalıp sunar. Örneğin bir kaset çalar için çalma durumunda göstereceği davranış ile durma durumunda göstereceği davranış farklıdır. Bu kaset çalar çalma durumundayken çal tuşuna basıldığında bir davranış sergilemezken durma durumunda olduğunda çal tuşuna basıldığında bir davranış sergiler. Bu gibi nesneleri modellerken bu State Pattern'ı kullanılabilir.

Uygulama
  • Nesnenin her bir durumunda farklı davranış sergileyeceği sınıflar oluşturulur.
  • Bu sınıflar ortak bir arayüzü implement ederler.
  • İstemci sadece Context sınıfını bilerek yapmak istediği işlemi uygular. Context sınıfı State arayüzünü kullanarak işlemleri uygular.





public interface IKasetCalarState {
    
    public void cal();
    public void durdur();
}

public class KasetCalarContext {
    IKasetCalarState state;
    
    public KasetCalarContext() {
        IKasetCalarState state = new DuruyorState();
    }
    
    public void cal() {
        state.cal();
    }
    
    public void durdur() {
        state.durdur();
    }
}

public class CaliyorState implements IKasetCalarState {
    
    public void cal() {
        System.out.println("Kaset zaten çalınıyor");
    }
    
    public void durdur() {
        System.out.println("Kaset durduruldu");
    }
}

public class DuruyorState implements IKasetCalarState {
    
    public void cal() {
        System.out.println("Kaset çalınmaya başlandı");
    }
    
    public void durdur() {
        System.out.println("Kaset zaten çalınmıyor");
    }
}

public class Test {
    
    public static void main() {
        KasetCalarContext context = new KasetCalarContext();
        context.cal();
        context.durdur();
    }
}

No comments:

Post a Comment