C++, Java ve C# ile UML ve Dizayn Paternleri Kitabı Aykut Taşdelen


c++ java ve c# ile uml ve dizayn paternleri kitap
Kitapla ilgili detaylı bilgi için kitabın resmi web sitesini ziyaret edebilirsiniz

Reklamlar

Java’daki Yerleşik Observer Patern’i idiom’ları

JAVA’daki Yerleşik Observer Özellikleri

Aşağıdaki yazı UML ve Dizayn Patern’leri kitabımdan alıntıdır, izinsiz alıntı yapılamaz !

JDK 1.0’da kütüphaneye eklenmiş olan java.util paketindeki Observer isimli interface, durum bilgisi  değiştiğinde kendisini gözlemleyen nesnelere uyarı gönderebilen nesneler için gerekli eylemi (update fonksiyonunu) tanımlar.

Okumaya devam et

INotifyPropertyChange Arayüzü ile Observer

INotifyPropertyChange Interface 

Not  : Bu yazı Aykut TAŞDELEN’in WPF kitabından alıntıdır izinsiz kullanımı suçtur ve konunun devamı kitapta yer almaktadır !

 

Bir nesnede saklanmakta olan durum bilgisinin çeşitli sebeplerle değişimi halinde o nesnenin bind edilmiş olduğu kullanıcı arayüzündeki kontrolün de içeriğinin güncellenmesi gerekir. Bu amaçla .NET kütüphanesine INotifyPropertyChange isimli bir arayüz (interface) eklenmiştir. Bu arayüzü implemente eden bir sınıfa ilişkin nesnenin herhangi bir property’sinde değişme olursa bir event raise edilmek ve yakalanmak suretiyle bind edilen ui elemanı güncellenebilir. Aşağıdaki örnekte CStok sınıfı bu durumu örneklemektedir.

 

public class CStok : INotifyPropertyChanged

{

    private int m_Adet;

 

    public int Adet

    {

        get { return m_Adet; }

        set

        {

            m_Adet = value;

            OnChanged(“Adet”);

        }

    }

    private string m_Urun;

 

    public string Urun

    {

        get { return m_Urun; }

        set

        {

            m_Urun = value;

            OnChanged(“Urun”);

        }

    }

 

    public CStok(string urun, int adet)

    {

        m_Adet = adet;

        m_Urun = urun;

    }

 

    public event PropertyChangedEventHandler PropertyChanged;

    // Bu event interface’ten geliyor

 

    protected void OnChanged(string prop_name)

    {

        if (this.PropertyChanged != null)

        {

            PropertyChanged(this, new PropertyChangedEventArgs(prop_name));

        }

    }

}

Bu sınıf görseldeki TextBox’lara programatik olarak bind edilmiştir.  

 

<Window x:Class=”csd.Window1″

    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;

    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml&#8221;

    Title=”Window1″ Height=”300″ Width=”300″>

    <Grid>

        <TextBox Name=”txtUrun”  />

        <TextBox Name=”txtAdet”  />

        <Button Name=”button1″ Click=”button1_Click”>Test</Button>

    </Grid>

</Window>

 

Butona tıklandığında Adet property’sine yeni değer atanmakta ve bağlı kontrol de aynı anda değişim göstermektedir.

 

public partial class Window1 : Window

{

    CStok stok = new CStok(“Buzdolabı”, 13);

 

    public Window1()

    {

        InitializeComponent();

 

        txtUrun.Text = stok.Urun;

        txtAdet.Text = stok.Adet.ToString();

 

        stok.PropertyChanged += new
             System.ComponentModel.PropertyChangedEventHandler
             (stok_PropertyChanged);

    }

 

    void stok_PropertyChanged(object sender,
          System.ComponentModel.PropertyChangedEventArgs e)

    {

        switch (e.PropertyName)

        {

            case “Urun”:

                txtUrun.Text = stok.Urun;

                break;

            case “Adet”:

                txtAdet.Text = stok.Adet.ToString();

                break;

        }

    }

 

    private void button1_Click(object sender, RoutedEventArgs e)

    {

        // Butona basılınca ilgili textbox yei değer atandığı için değişir

        stok.Adet = 30;

    }

}