Mediator tasarım deseni behavioral(davranışsal) tasarım kalıbı grubundadır.
Sınıf sayısı arttıkça, aralarındaki bağımlılıklar artar.
Mediator bu sınıflar arasındaki bağımlılıkları azaltmak ve iletişimi kolaylaştırmak için kullanılır.
Sadece bir sınıf, yönetici sınıf olarak diğer sınıfların koordine edilmesinden sorumlu tutulur.
Bir nesnede yapılan değişikliğin diğer nesneleri etkilemesini engeller.
Mediator: Nesneler arasındaki ilişkiyi sağlayacak metotların tanımlı olduğu arayüz.
ConcreteMediator: Nesneler arasındaki ilişkiyi sağlayacak gerçek nesnedir. İçinde Colleague arayüzünden türeyen nesnelerin listesi vardır.
Colleague: ConcreteMediator u kullanarak işlem yapacak olan nesnelerin uygulaması gereken arayüzü temsil eder. Kendi içinde ConcreteMediator nesnesi vardır.
ConcreteColleague: ConcreteMediator üzerinden birbirleri ile ilişkili nesnelerdir. Colleague arayüzünü uygularlar.
Örnek olarak uçuş kontrol sistemlerinde uçaklar birbirileri ile haberleşmez.
Bunun yerine kule tüm uçuşlar arasında koordinasyonu sağlar.
public class Main {
public static void main(String[] args) {
Ucus ucus1 = new Ucus("Ucus1");
Ucus ucus2 = new Ucus("Ucus2");
Ucus ucus3 = new Ucus("Ucus3");
Ucus ucus4 = new Ucus("Ucus4");
UcusKontrol ucusKontrol = new UcusKontrol();
ucusKontrol.addFlight(ucus1);
ucusKontrol.addFlight(ucus2);
ucusKontrol.addFlight(ucus3);
ucusKontrol.addFlight(ucus4);
ucus3.requestLand(ucusKontrol);
ucus4.requestLand(ucusKontrol);
ucus1.requestLand(ucusKontrol);
ucus2.requestLand(ucusKontrol);
}
}
public class Ucus{
private String ucusAd = "";
public Ucus(String ucusAd) {
super();
this.ucusAd = ucusAd;
}
public String getUcusAd() {
return ucusAd;
}
public void land() {
System.out.println("Landing: " + getUcusAd());
}
public void pass() {
System.out.println("Passing: " + getUcusAd());
}
public void requestLand(UcusKontrol ucusKontrol) {
ucusKontrol.requestLand(this);
}
}
public class UcusKontrol {
private List ucusListe = new ArrayList();
public void requestLand(Ucus ucus) {
ucus.land();
removeFlight(ucus);
for (Ucus ucus : ucusListe) {
ucus.pass();
}
}
public void addFlight(Ucus ucus) {
ucusListe.add(ucus);
}
private void removeFlight(Ucus ucus) {
ucusListe.remove(ucus);
}
}
0 Yorum