Mehmet Ethem SULAN :: Java Tasarım Şablonları :: Java Observer Design Pattern Example and UML Diagram(Gözlemci Tasarım Şablonun Java Kodu)

observer

Uml diagramın daha büyük resmi:http://prntscr.com/akm0

Takip ve haber vermede kullanılır.Nesnenin durumunda bir değişiklik olunca bizi haberdar eder.Bir çok uygulama bunu kullanır.Mesela olay algılıyıcıları button tıklandığındığında gerçekleşecek olay gibi.Sürekli bir nesneyi dinlemek yerine nesnenin durumunda bir değişilik olduğunda bize bildirmesini daha iyidir.Eğer sürekli bir nesneyi dinleme alırsak mesela her sn başı buttonun tıklanıp tıklanmadığını kontrol etmek yerine button tıklandığında bize haber vermesini isteriz.Bize haber vermesinden kasıt buttonun içine button tıklandığında gerçekleştirmek istediğimiz kodu yazarız.Ya da bu örnekte olduğu gibi bir topluluk var ve arada bir bütün üyelere mail atılır.Her sefer üyelerin gidip grubu kontrol etmesine gerek yok.Gruba mail atıldığında otomatik olarak grup üyelerine de gelir mesajlar.Başka örnek bir dergiye aboneyiz her hafta telefon açıp derginiz çıktı mı acaba demek yerine dergi çıktığında onların bizi arayıp derginiz hazır buyrun alabilirsiniz şeklinde bir çok uygulama da kullanılır.Java da bu şablon için sınıf ve arayüz vardır.

package www.ethemsulan.com;
import java.util.Observable;
import javax.swing.JOptionPane;
public class OlayKaynagi extends Observable{
public void uyelerDinlemede() {
	boolean kontrol=true;
	String mesajYolla;
	while (kontrol) {
mesajYolla=JOptionPane.showInputDialog("Mesaj yaz");
if("".equals(mesajYolla) || mesajYolla==null){
	kontrol=false;
}else{
	setChanged();
	notifyObservers(mesajYolla);
			}
		}
	}
}

Orj kod:http://www.ethemsulan.pastebin.com/04zSGBeN

package www.ethemsulan.com;
import java.util.Observable;
import java.util.Observer;
public class GercekOlayYonet implements Observer {
	private String girilenDeger;
public void update(Observable arg0, Object arg1) {
if(arg1 instanceof String){
	girilenDeger=(String)arg1;
System.out.println("Topluluk uyelerine " +
		"mail gonderildi:"+girilenDeger);
		}	
	}
}

Orj kod:http://www.ethemsulan.pastebin.com/GaHZ19q8

package www.ethemsulan.com;
public class TestSinifi {
	public static void main(String[] args) {
	OlayKaynagi kaynak=new OlayKaynagi();
	GercekOlayYonet olay=new GercekOlayYonet();
		kaynak.addObserver(olay);
		kaynak.uyelerDinlemede();
	}
}

Orj kod:http://www.ethemsulan.pastebin.com/Pryvq9Av

Comments

There is one comment for this post.

  1. anıl on Nisan 18, 2011 5:50 pm

    hocam unıde java observerla yapılmıs bır program odevım var acaba boyle hazır kod bulabılecegım bıryer var mıdır

Write a Comment

Let me know what you think?