Yazılım tasarım desenlerini bilmek ile yazılımı dizayn edebilmek arasında büyük fark vardır. Yazılımı dizayn etmek, baya bir tecrübe gerektiren bir iştir. Tasarım desenlerini bir kaç hafta içerisinde öğrenebiliyorsunuz. Fakat bir projeyi, bu desenlerle dizayn etmeye çalıştığınızda yaptığınız dizaynın ne derece bir dizayn olduğunu zaman ve projedeki gelişmeler gösteriyor.
C kullanırken de nesne yönelimli gibi kullanabiliriz. Bununla alakalı yazdığım bir önceki yazıma göz atabilirsiniz.
Problem
Bu tasarım, bir çok veri yapısı ya da sınıfın herhangi bir olaydan haberdar olmak istemesi üzerine geliştirilmiş bir dizayndır. Yazılımdaki bir olayı dinleyici sınıflar ile olayı gerçekleştiren sınıfı birbirinden yalıtmak ve bu dinleyici sınıfları dinamik olarak oluşturabilmek amaçlanmıştır.
Dizayn
1-) Dinleyici sınıfları Observer Soyut(Abstract) sınıfı ile bir çatı altına topluyoruz.
2-) Topladığımız bu dinleyici sınıfları, Subject sınıfına bir liste halinde teker teker iliştiriyoruz.
3-) Olayı tetikleyen bir trigger sınıfı oluşturup, bu sınıfın Subject sınıfını kullanabilmesini sağlıyoruz.
4-) Trigger sınıfı, Subject sınıfındaki durumu değiştirdiğinde, Subject sınıfı tüm dileyici sınıfların “update()” fonksiyonunu çağırıyor.
Kod için;