Genel

State Pattern | Java Design Patterns

Java Tasarım Desenleri dersine hoşgeldiniz. State Pattern ile ilgili derse aşağıdaki adresten ulaşabilirsiniz.

State Design Pattern

State Design Pattern, davranışsal bir tasarım desenidir ve bir nesnenin durumunu temsil etmek ve bu durumlara göre davranışını değiştirmek için kullanılır. Bu desen, nesnenin iç durumunu soyut bir sınıf olarak tanımlar ve nesnenin davranışını bu duruma göre değiştirir.

Temel Bileşenler

  • Context (Bağlam): Bu, durumu değişen nesneyi temsil eder. Context, durumları yönetir ve durum değişikliklerini gerçekleştirir.
  • State (Durum): Bu, nesnenin bir durumunu temsil eden soyut bir sınıftır. State sınıfı, durumla ilgili davranışları tanımlar.
  • Concrete States (Somut Durumlar): Bu, State arabirimini uygular ve belirli bir durumu temsil eder. Her somut durum, durumla ilgili özel davranışları uygular.

Amaç

State Design Pattern’in amacı, bir nesnenin durumunu temsil etmek ve bu duruma bağlı olarak nesnenin davranışını değiştirmektir. Bu desen, durumla ilgili davranışları soyut bir sınıf olarak tanımlar ve nesnenin iç durumunu değiştirerek bu davranışları etkinleştirir.

Avantajlar

  • Esneklik: State Pattern, bir nesnenin davranışını duruma göre dinamik olarak değiştirmenizi sağlar, bu da kodun daha esnek olmasını sağlar.
  • Modülerlik: Durumlar soyut bir sınıf olarak tanımlanır ve her bir durumun kendi davranışları vardır, bu da kodun daha modüler olmasını sağlar.
  • Uygulanabilirlik: Durumlar, nesnenin durumunu temsil eder ve nesnenin davranışını değiştirmek için kullanılabilir.

State Design Pattern, bir nesnenin durumunu temsil etmek ve davranışını dinamik olarak değiştirmek için kullanılır, bu da kodun daha esnek, modüler ve uygulanabilir olmasını sağlar.


public interface LambaState {

    void on();
    void off();

}


public class LambaKapat implements LambaState{

    LambaContext lambaContext;

    public LambaKapat(LambaContext lambaContext) {
        this.lambaContext = lambaContext;
    }

    @Override
    public void on() {
        lambaContext.setLambaState(lambaContext.getLambaAc());
        System.out.println("Lamba açıldı");
    }

    @Override
    public void off() {
        System.out.println("Lamba zaten kapalı");
    }
}


public class LambaAc implements LambaState {

    LambaContext lambaContext;

    public LambaAc(LambaContext lambaContext) {
        this.lambaContext = lambaContext;
    }

    @Override
    public void on() {
        System.out.println("Lamba zaten açık");
    }

    @Override
    public void off() {
        lambaContext.setLambaState(lambaContext.getLambaKapat());
        System.out.println("Lamba Kapatıldı.");
    }
}



public class LambaContext {

    private LambaState lambaState;
    private LambaAc lambaAc;
    private LambaKapat lambaKapat;

    public LambaContext() {
        lambaAc = new LambaAc(this);
        lambaKapat = new LambaKapat(this);
        lambaState = lambaKapat;
        System.out.println("Lamba Kapalı olarak başladı.");
    }

    public void start() {
        lambaState.on();
    }

    public void close() {
        lambaState.off();
    }

    public void setLambaState(LambaState lambaState) {
        this.lambaState = lambaState;
    }

    public LambaState getLambaState() {
        return lambaState;
    }

    public LambaAc getLambaAc() {
        return lambaAc;
    }

    public LambaKapat getLambaKapat() {
        return lambaKapat;
    }
}


public class Main {
    public static void main(String[] args) {
        LambaContext lambaContext=new LambaContext();
        lambaContext.start();
        lambaContext.close();
        lambaContext.close();

    }
}

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir