C kullanırken de nesne yönelimli gibi kullanabiliriz. Bu yazıyı okumadan önce bununla alakalı yazdığım bir önceki yazıma göz atabilirsiniz.
Problem
Bu tasarım deseni, Yazılımda işlenecek olan değişken sayıdaki veri yapıları veya sınıfların sistematik bir şekilde işlenmesi için geliştirilmiştir. Karışık ve düzensiz gelen isteklerin efektif bir şekilde sıralanması ve işleme alınmasını herhangi bir ekstra karmaşa yaratmadan sağlamak amaçlanmıştır.
Dizayn
1 -) Gelen istekler üzerine işlenmesi muhtemel veri yapılarını (Handle1, Handle2, Handle3) ChainBase Soyut sınıfından türetiyoruz.
2-) ChainBase sınıfı kendinden bir sonraki gelecek ChainBase adresini tutmasını sağlamak için burada ChainBase İşaretleyicisi ve addChain() fonksiyonu oluşturuyoruz.
3-) ChainBase sınıfına “handle()” sanal fonksiyonunu ekliyoruz. Ve bu sanal fonksiyonu, işlemini tamamladığında bir sonraki veri yapısına ait handle() fonksiyonunu çağırıyor.
4-) “Starter” Sınıfı oluşturarak 3 mevcut sınıftan bir işlem zinciri oluşturup bu işlem zincirini başlatıyoruz.
C de yazılmış Chain Of Responsibility tasarım deseni örnek kodu için;
https://github.com/electronicengine/design_patterns_c/tree/master/chain_of_responsibilty