Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me
Showing posts with label State. Show all posts
Showing posts with label State. Show all posts

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();
    }
}

Bu diyagramlar sistemin farklı zamanlardaki durumunu ortaya koymak için tasarlanırlar. Örneğin kullandığımız ATM'lerin sisteminin durumu bizim yaptığımız işlemlere değişir. Sürekli aynı durumda olmayan bir sistemdir ve sistemin bu durumlarını tasarlamak için durum diyagramları kullanılır.

Durum Diyagramları Nasıl Çizilir? (State Diagram Nasıl Çizilir?)
  • Sistemin başlangıç durumu içi dolu yuvarlak şeklinde çizilir.
  • Sistemin sonlanma durumu içi boş yuvarlağın içinde daha küçük içi dolu bir yuvarlak olacak şekilde çizilir.
  • Sistemin durumları kenarları yuvarlatılmış dikdörtgenler şeklinde çizilir.
  • Tetikleyici olaylar sistemin durumları arasına düz bir çizgi şeklinde çizilir. Bu olaylar ile sistemin durumu değişir. Olaylar ile ilgili açıklayıcı bilgi veya kodlamadaki metot karşılıkları çizgi üzerine yazılabilir.
  • Karar ifadeleri baklava şeklinde dikdörtgen olarak çizilir.