5 Mart 2015 Perşembe

Observer Design Pattern

          Observer design pattern , türkçe karşılığı gözlemci tasarım kalıbı olup temelinde de gözlemcilerin hepsini tek bir komutla haberdar etme , işlem yaptırma veya harekete geçirme gibi işlemler için kullanılır . Yani elimizde bir nesne olduğunu düşünelim , bu nesne değiştiğinde gereken diğer tüm sınıf ya da methodlara haber verilir . Yani bu nesneyle ilgilenen sınıflar sürekli nesne değişti mi sormaktansa -thread başlatıp nesnenin değişimi gözlemlenebilir - , nesne değiştiğinde tüm sınıflara haber vermek için oluşturulan bir ara sınıf daha mantıklı bir çözüm gibi duruyor .

           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