Aşağıdaki örnekte daha iyi anlaşılması için tüm operatörlere mesaj atan bir program yapılmıştır . Kodda sadece bir satırlık kodla her sınıf için tek tek yazılması gereken kod yazılması sağlanmıştır .-3 farklı operatöre ayrı ayrı mesaj atmaktansa tek bir satırla 3 operatöre mesaj atmak-
package com.gurk.designpatterns;
import java.util.ArrayList;
import java.util.List;
public class Islem {
private List list = new ArrayList<>();
private String message;
public void observerEkle(Observer observer) {
list.add(observer);
}
public void tumKullanicilaraGonder() {
for (Observer observer : list) {
observer.mesajGonder();
}
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
tumKullanicilaraGonder();
}
}
package com.gurk.designpatterns;
public abstract class Observer {
/**
* alttaki sınıflar kullanacak diye bir tane Islem tanımla
*/
protected Islem islem;
public abstract void mesajGonder();
}
package com.gurk.designpatterns;
public class Avea extends Observer {
public Avea(Islem islem) {
// this.islem = observer sınıfının parametresi
this.islem = islem;
this.islem.observerEkle(this);
}
@Override
public void mesajGonder() {
System.out.println(islem.getMessage()+" AVEA lı");
}
}
package com.gurk.designpatterns;
public class Turkcell extends Observer{
public Turkcell(Islem islem) {
this.islem=islem;
this.islem.observerEkle(this);
}
@Override
public void mesajGonder() {
System.out.println(islem.getMessage()+" TURKCELL li");
}
}
package com.gurk.designpatterns;
public class Vodafone extends Observer {
public Vodafone(Islem islem) {
this.islem = islem;
this.islem.observerEkle(this);
}
@Override
public void mesajGonder() {
System.out.println(islem.getMessage() + " VODAFONE lu");
}
}
package com.gurk.designpatterns;
public class Test {
public static void main(String[] args) {
Islem islemler = new Islem();
new Turkcell(islemler);
new Avea(islemler);
new Vodafone(islemler);
islemler.setMessage("Merhaba");
}
}
Sonuç
Merhaba TURKCELL li
Merhaba AVEA lı
Merhaba VODAFONE lu
Kısaca kodu açıklamak gerekirse aynı işlemi gerçekleştirecek olan tüm sınıflar observer sınıfı altında toplanmıştır . islemler.setMessage("STR"); komutu çağırılığında ise listte tutulan tüm observerler tetiklenip ortak olan methodların çağrılması sağlanmıştır .
0 yorum:
Yorum Gönder