Welcome to My Blog 👋

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

Design Pattern - Mediator



  April 26, 2019    Labels:,,,,,,,, 

Nesneye yönelik programlama tekniğinde yazılımımızı nesneler halinde tasarlarız. Bu nesneler aralarında iletişim halindedirler. Bu iletişim ile bu nesneler arasında bir bağımlılık oluşur. Yazılım sistemlerinde bağımlılık istenmeyen bir durumdur. Çünkü bağımlılık demek yazılım sistemindeki bir değişikliğin yapılmasının zorlaşması demektir. Sistem büyüdükçe bağımlılıklar o kadar artarki değişiklik yapılması imkansız bir hale gelebilir. Bu problemi çözmek için mediator pattern'ı kullanılabilir. Bu pattern ile iki nesne birbirine bağımlı olmadan birbirini bilmeden birbiri ile iletişim kurabilir. Bunu sağlayan yapı, iletişim kuracak iki nesne arasına bir nesne daha koyarak iletişimi bu nesne üzerinden yapar.
Örneğin bir havalimanında pisti kullanacak uçaklar birbirleri ile iletişim kurmazlar. Çünkü böyle bir durumda inanılmaz bir karmaşıklık ortaya çıkar. Tüm uçaklar sadece kuleyle iletişim kurarak pistin kullanımı sekronize edilir.

Uygulama
  • Birbirleri ile iletişim kuracak nesneler mediator interface'ini barındırırlar ve kullanırlar.
  • İletişime özel mediator sınıfları tanımlanır ve mediator interface'i implement edilir.
  • Bir nesne diğer nesneler ile iletişim kurmak istediğinde mediator interface'ini kullanarak özel tanımlanan metotlar üzerinden iletişim kurar.




public class IstanbulKule implements Kule{
    public void ucakEkle (Ucak ucak) {
        ucaklar.add(ucak);
    }
    public void ucakCikar (Ucak ucak) {
        ucaklar.remove(ucak);
    }
    public void haberVer (Ucak ucak, String mesaj) {
        ucak.mesajAl(mesaj);
    }
}

public interface Kule {
    ArrayList<Ucak> ucaklar;
    public void ucakEkle(Ucak ucak);
    public void ucakCikar(Ucak ucak);
    public void haberVer(Ucak ucak, String mesaj);
}

public class UcakModel1 {
    public Kule kule = new IstanbulKule();
    public void haberAl (String mesaj) {
        System.out.println("UcakModel1 Haber alındı." + mesaj);
    }
}

public class UcakModel2 {
    public void haberAl (String mesaj) {
        System.out.println("UcakModel2 Haber alındı. " + mesaj);
    }
}

public interface Ucak () {
    public void haberAl(String mesaj);
}

public class Test {
    public static void main () {
        UcakModel1 ucak1 = new UcakModel1();
        UcakModel2 ucak2 = new UcakModel2();
        ucak1.kule.haberVer(ucak2, "Pisti kullanıyorum");
    }
}



No comments:

Post a Comment