bugün
- sözlükte erkekleri istemiyoruz16
- 7 haziran 2026 aziz yıldırım'ın başkan seçilmesi9
- beyazsemsiyeliyabanci48
- instagram'a sürekli hikaye atan kadın4
- evlenilecek erkek nasıl anlaşılır8
- ilk aşkınız3
- çocukken alınamayan şeyleri büyüyünce almak3
- togg'a lpg taktırmak7
- bugün mükemmel bir gün olacak3
- bebeksi bir hatunla sevgili olmak7
- türkçe'nin edebi bir dil olmadığı gerçeği6
- yıldırım'ın başkan olmasından mutlu olan cimbomlu2
- soğuk suyla duş alan insan2
- kaşlarını alan erkek2
- 7 haziran 2026 büyük sözlük ifşası32
- yorgun mermi22
- akp'li kayseri belediyesi'nin villa parseli satışı3
- albin kurti2
- özgürlük ile güvenlik arasındaki sahte ikilem6
- günaydın şarkısı3
- aziz yıldırım12
- 7 haziran 2026 belde ara seçimleri2
- kızının düğününde oynayan baba6
- kürt fıkraları2
- monica bellucci ile 1 hafta vs 50 bin dolar6
- üstteki yazar hakkında fikrini söyle63
- gammazlama yapmamak12
- a milli futbol takımı'nın arizona'ya gelmesi2
- sydney sweeney'in memeleri4
- hangi yazarla evlenmek isterdiniz10
- günün şiiri8
- fetöcü olduğunu beklemediğiniz kişiler3
- haysenin1212
- anne hathaway2
- d'i s c o film2
- gammaz beni çaylak yapmaz ki gammaz beni çsy9
- satranç haram yasaklansın7
- gina carano11
- bu köyden olsam ne olacak8
- aşık olmak6
- diamond bosphorus'un tüm sözlüğe yürümesi6
- 7 haziran 2026 türkiye venezuela maçı2
- sözlük yazarlarının ölüme bakış açısı20
- doktorlara saygının kalmamasının temel nedenleri7
- anın görüntüsü21
- yapay zeka moderatörü15
- mılli yazılım f-16 ların kabiliyetini artıracak9
- en gey özelliğiniz15
- güzel ayaklı bir kızla evlenebilirim4
- uysaljakoben31
design pattern kavramı nesne tabanlı programlama mantığında sıkça kullanılır. belli kalıplar vardır ve bu kalıplar nesne tabanlı programlamada belli ihtiyaçlardan doğmuştur. observer pattern de bunlardan bir tanesidir. bu pattern'i kafamızda canlandıracak bir örnek vermek gerekirse ki bu bir gazete sitesine abone olmak olabilir. burada gazete sitesi bir yayıncıdır ve yeni haberler çıktığından bunları yayınlar. siteye abone olanlar ise bu haberleri çeşitli şekillerde görürler. bu rss şeklinde olur, mail şeklinde olur vs.
tanım olarak observer pattern kapsadığı objeler arasında one-to-many ilişkisi kurar. böylece bir objenin durumu değiştiğinde, bu objeye bağlı diğer objelere haber verilir ve objeler kendilerini güncellerler.
sınıf diyagramı aşağıdaki gibidir:
diyagramda iki adet interface vardır, subject ve observer. observer olacak sınıflar yani değişikliklerden haberi olacak sınıflar kendilerini bu interface'i implemente eden sınıflara, concretesubject, registerobserver() metodu ile kayıt ederler. istedikleri zamanda kendilerini removeobserver metodu ile abonelikten kaldırırlar. subject sınıfı da observer objelerinin kim olduklarını bilmez. o sadece kendisine kayıt olan objelerin observer interface'inin implemente ettiklerini bilir. böylece subject objesinde bir değişiklik olduğu zaman notifyobservers() metodu ile kendisine kayıtlı olan observer objelerinin update() metodlarını çağırır. observer objeleri de kendilerini yenilerler. observer pattern sayesinde subject ve observerlar birbirlerini bilmezler, interface'ler aracılığı ile haberleşilirler. böylece tasarım unsurlarından loosely coupled objeler sağlanmış olur. ikincisi runtime esnasında observer ollan objeler kendilerini subject sınıfına kayıt ettirebilir yada kendilerini kayıt listesinden kaldırabilirler.
örneğin bir haber sitesinin abonelik sisteminde iki tür abonelik olsun. bunlar mail ve rss olsun. mail abonelik sisteminde abonelere haberlerin özet hali mail atılsın. rss abonelik sisteminde haberlerin özetleri rss standardında oluşturulsun. abonelerin rss destekli programlari oluşturulan dosyadaki değişiklikleri otomatik olarak takip ettikleri için bizim abonelere mail veya başka bir ileti atmamıza gerek yoktur. burada iki tane arayüzümüz, subject ve observer, dört tane de sınıfımız olacak, haber, haberyayinlayicisi, mailaboneleri ve rssaboneleri. kodlar tam olmasa da aşağıdaki gibi olabilir:
public interface subject {
public void registerobserver(observer observer);
public void removeobserver(observer observer);
public void notifyobservers();
}
public interface observer {
public void update(list haberler);
}
public class haberyayinlayicisi implements subject {
private arraylist observers;
private arraylist haberler;
public haberyayinlayicisi() {
observers = new arraylist();
haberler = new arraylist();
}
public void registerobserver(observer observer) {
observers.add(observer);
}
public void removeobserver(observer observer) {
observers.remove(observer);
}
public void notifyobservers() {
for (observer observer : observers) {
observer.update(haberler);
}
}
public void yenihaberlergeldi() {
notifyobservers();
}
// bu metodu yeni haberleri olusturan baska bir sınıf cagiracak..
public void setyenihaberler(list haberler) {
this.haberler = (arraylist) haberler;
yenihaberlergeldi();
}
}
// bu sınıf bir tane haberi gösterir.
public class haber {
private string baslik;
private string ozet;
private string link;
public haber() {}
// setters-getters, constructors
.
}
// observer interface'ini implemente eden bir sınıf.
// abonelerine mail yolu ile haberleri ulaştırır.
public class mailaboneleri implements observer {
private subject haberyayinlayicisi;
public mailaboneleri(subject haberyayinlayicisi) {
this.haberyayinlayicisi = haberyayinlayicisi;
haberyayinlayicisi.registerobserver(this);
}
public void update(list haberler) {
string mailbody = constructmailbody(haberler);
sendmailtosubscribers(mailbody);
}
/**
* bu metod kayitli tum abonelere mail gonderir.
* orn: aboneler veritabanindan cekilebilir.
*/
private void sendmailtosubscribers(string mailbody) {
}
// bu metod gonderilecek mail icerigini olusturur.
private string constructmailbody(list haberler) {
return "";
}
}
// bu sınıf da observer interface'ini implemente eden diger siniftir.
// abonelerine rss kanali ile haberleri ulaştırır.
public class rssaboneleri implements observer {
private subject haberyayinlayicisi;
public rssaboneleri(subject haberyayinlayicisi) {
this.haberyayinlayicisi = haberyayinlayicisi;
haberyayinlayicisi.registerobserver(this);
}
public void update(list haberler) {
string rssxml = constructrssxml(haberler);
putxmltodirectory(rssxml);
}
// bu metod rss standartlarina uygun xml'i uretir.
private string constructrssxml(list haberler) {
return null;
}
// bu metod uretile xml'i var olan xml dosyasi ile degistirir.
// aboneler'in kullandiklari rss programlari degisikligi otomatik olarak
// algilarlar...
private void putxmltodirectory(string rssxml) {
}
}
// bu sinif da ornek bir calisan sınıftir.
public class main {
public static void main(string[] args) {
haberyayinlayicisi haberyayinlayicisi =
new haberyayinlayicisi();
mailaboneleri mailaboneleri =
new mailaboneleri(haberyayinlayicisi);
rssaboneleri rssaboneleri =
new rssaboneleri(haberyayinlayicisi);
haber a = new haber("olay, olay, olay!!!", "bina patladi!!!",
"http://www.habermakinasi.com/?id=5");
haber b = new haber("flas, flas, flas!!!", "ikinci bina patladi!!!", "http://www.habermakinasi.com/?id=7");
list haberler = new arraylist();
haberler.add(a);
haberler.add(b);
haberyayinlayicisi.setyenihaberler(haberler);
}
}
(bkz: http://sekobey.blogspot.c.../07/observer-pattern.html)
tanım olarak observer pattern kapsadığı objeler arasında one-to-many ilişkisi kurar. böylece bir objenin durumu değiştiğinde, bu objeye bağlı diğer objelere haber verilir ve objeler kendilerini güncellerler.
sınıf diyagramı aşağıdaki gibidir:
diyagramda iki adet interface vardır, subject ve observer. observer olacak sınıflar yani değişikliklerden haberi olacak sınıflar kendilerini bu interface'i implemente eden sınıflara, concretesubject, registerobserver() metodu ile kayıt ederler. istedikleri zamanda kendilerini removeobserver metodu ile abonelikten kaldırırlar. subject sınıfı da observer objelerinin kim olduklarını bilmez. o sadece kendisine kayıt olan objelerin observer interface'inin implemente ettiklerini bilir. böylece subject objesinde bir değişiklik olduğu zaman notifyobservers() metodu ile kendisine kayıtlı olan observer objelerinin update() metodlarını çağırır. observer objeleri de kendilerini yenilerler. observer pattern sayesinde subject ve observerlar birbirlerini bilmezler, interface'ler aracılığı ile haberleşilirler. böylece tasarım unsurlarından loosely coupled objeler sağlanmış olur. ikincisi runtime esnasında observer ollan objeler kendilerini subject sınıfına kayıt ettirebilir yada kendilerini kayıt listesinden kaldırabilirler.
örneğin bir haber sitesinin abonelik sisteminde iki tür abonelik olsun. bunlar mail ve rss olsun. mail abonelik sisteminde abonelere haberlerin özet hali mail atılsın. rss abonelik sisteminde haberlerin özetleri rss standardında oluşturulsun. abonelerin rss destekli programlari oluşturulan dosyadaki değişiklikleri otomatik olarak takip ettikleri için bizim abonelere mail veya başka bir ileti atmamıza gerek yoktur. burada iki tane arayüzümüz, subject ve observer, dört tane de sınıfımız olacak, haber, haberyayinlayicisi, mailaboneleri ve rssaboneleri. kodlar tam olmasa da aşağıdaki gibi olabilir:
public interface subject {
public void registerobserver(observer observer);
public void removeobserver(observer observer);
public void notifyobservers();
}
public interface observer {
public void update(list haberler);
}
public class haberyayinlayicisi implements subject {
private arraylist observers;
private arraylist haberler;
public haberyayinlayicisi() {
observers = new arraylist();
haberler = new arraylist();
}
public void registerobserver(observer observer) {
observers.add(observer);
}
public void removeobserver(observer observer) {
observers.remove(observer);
}
public void notifyobservers() {
for (observer observer : observers) {
observer.update(haberler);
}
}
public void yenihaberlergeldi() {
notifyobservers();
}
// bu metodu yeni haberleri olusturan baska bir sınıf cagiracak..
public void setyenihaberler(list haberler) {
this.haberler = (arraylist) haberler;
yenihaberlergeldi();
}
}
// bu sınıf bir tane haberi gösterir.
public class haber {
private string baslik;
private string ozet;
private string link;
public haber() {}
// setters-getters, constructors
.
}
// observer interface'ini implemente eden bir sınıf.
// abonelerine mail yolu ile haberleri ulaştırır.
public class mailaboneleri implements observer {
private subject haberyayinlayicisi;
public mailaboneleri(subject haberyayinlayicisi) {
this.haberyayinlayicisi = haberyayinlayicisi;
haberyayinlayicisi.registerobserver(this);
}
public void update(list haberler) {
string mailbody = constructmailbody(haberler);
sendmailtosubscribers(mailbody);
}
/**
* bu metod kayitli tum abonelere mail gonderir.
* orn: aboneler veritabanindan cekilebilir.
*/
private void sendmailtosubscribers(string mailbody) {
}
// bu metod gonderilecek mail icerigini olusturur.
private string constructmailbody(list haberler) {
return "";
}
}
// bu sınıf da observer interface'ini implemente eden diger siniftir.
// abonelerine rss kanali ile haberleri ulaştırır.
public class rssaboneleri implements observer {
private subject haberyayinlayicisi;
public rssaboneleri(subject haberyayinlayicisi) {
this.haberyayinlayicisi = haberyayinlayicisi;
haberyayinlayicisi.registerobserver(this);
}
public void update(list haberler) {
string rssxml = constructrssxml(haberler);
putxmltodirectory(rssxml);
}
// bu metod rss standartlarina uygun xml'i uretir.
private string constructrssxml(list haberler) {
return null;
}
// bu metod uretile xml'i var olan xml dosyasi ile degistirir.
// aboneler'in kullandiklari rss programlari degisikligi otomatik olarak
// algilarlar...
private void putxmltodirectory(string rssxml) {
}
}
// bu sinif da ornek bir calisan sınıftir.
public class main {
public static void main(string[] args) {
haberyayinlayicisi haberyayinlayicisi =
new haberyayinlayicisi();
mailaboneleri mailaboneleri =
new mailaboneleri(haberyayinlayicisi);
rssaboneleri rssaboneleri =
new rssaboneleri(haberyayinlayicisi);
haber a = new haber("olay, olay, olay!!!", "bina patladi!!!",
"http://www.habermakinasi.com/?id=5");
haber b = new haber("flas, flas, flas!!!", "ikinci bina patladi!!!", "http://www.habermakinasi.com/?id=7");
list haberler = new arraylist();
haberler.add(a);
haberler.add(b);
haberyayinlayicisi.setyenihaberler(haberler);
}
}
(bkz: http://sekobey.blogspot.c.../07/observer-pattern.html)
Gündemdeki Haberler
güncel Önemli Başlıklar
