Merhabalar değerleri Java dostları,

Bu yazımda observer design pattern değinmek istiyorum. Observer kelime anlamı olarak gözlemci olarak geçmektedir. Dolayısıyla basit bir mantık yürüttüğümüzde observer design pattern için; nesnelerin durumlarını gözlemlemek ve belli bir olay karşısında belirli işlemleri gerçekleştirmek olarak açıklama yapabiliriz.

Genel mantığını toparlayacak olursam, observer design pattern; işlemlerin ve nesnelerin üzerinde meydana gelecek olaylardan haberdar olmak için kullanılır. Meydana gelen değişiklikte bağlı nesnelerin metotlarının tetiklenmesi temelde yatar. Observer design pattern en çok kullanıldığı alanlar arasında GUI componentler vardır. Örnek verecek olursak, bir butonun tıklandığında yapılacak işlemler için kullanılan yapı, bir observer design pattern örneğidir. Observer design pattern için bir diğer kullanım alanı ise MVC’ dir.

Bir nesnenin durumunu devamlı sorgulamak yerine bu şekilde abone olma yöntemi ile haberdar edilme yapısı büyük kolaylık sağlamaktadır. Bir diğer deyişle “Sen beni çağırma ben seni çağırırım”.

Observer design pattern için üç temel yapımız vardır. Bunlar;

Subject: Üzerinde değişiklik yapılacak ve diğer nesnelerin tetiklenmesine neden olacak temel sınıf

Observe: Aboneliği sağlayacak interface veya abstract yapısı.

Subscriber: Değişikliklerden haberdar olmak isteyen ve abone olan nesneler.

Örneğimize geçelim.

package anajavatica.pattern.behavioral.observer;public class ObserverEvent {private Object sourceObject;

public ObserverEvent(Object sourceObject) {
this.sourceObject = sourceObject;
}

public Object getSourceObject() {
return sourceObject;
}

}

package anajavatica.pattern.behavioral.observer;public interface IObserverListener {public void doAction(ObserverEvent e);

}

package anajavatica.pattern.behavioral.observer;import java.util.ArrayList;
import java.util.List;public class Observer {

private List listenerList = new ArrayList();

public void addListener(IObserverListener listener) {
if (!listenerList.contains(listener))
listenerList.add(listener);
}

public void removeListener(IObserverListener listener) {
if (listenerList.contains(listener))
listenerList.remove(listener);
}

public void fireAction(Object sourceObject) {
System.out.println(“Firing action…”);
for (IObserverListener listener : listenerList)
listener.doAction(new ObserverEvent(sourceObject));
}

}

package anajavatica.pattern.behavioral.observer;public class ObserverMain {public static void main(String[] args) {

ObserverMain observerMain = new ObserverMain();
Observer observer = new Observer();
IObserverListener listener1 = new Listener1();
IObserverListener listener2 = new Listener2();
observer.addListener(listener1);
observer.addListener(listener2);

observer.fireAction(observerMain);

observer.removeListener(listener1);

observer.fireAction(observerMain);

}
}

class Listener1 implements IObserverListener {

@Override
public void doAction(ObserverEvent e) {
System.out.println(“Listener 1: “.concat(e.getSourceObject().toString()).concat(” -> “).concat(this.toString()));
}
}

class Listener2 implements IObserverListener {

@Override
public void doAction(ObserverEvent e) {
System.out.println(“Listener 2: “.concat(e.getSourceObject().toString()).concat(” -> “).concat(this.toString()));
}
}

Bol Java’ lı günler dileğiyle… 😀

No responses yet

Bir yanıt yazın

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