Behavioral DESIGN PATTERNS
یکی از زیرشاخه های الگوهای طراحی، Behavioral Design Patterns است. تمرکز و وظیفه اصلی این دیزاین پترن ها تعامل اشیاء و جداسازی وظایف آن ها از یکدیگر است.
Observer Design Pattern
دیزاین پترن Observer یکی از زیرشاخه های الگوهای طراحی از نوع Behavioral است.
الگوی طراحی Observer وابستگی یک به چند بین اشیا را تعریف می کند به طوری که وقتی یک شیء حالت خود را تغییر می دهد ، همه وابستگان آن به طور خودکار مطلع و به روز می شوند.
میزان استفاده : زیاد
پیاده سازی دیزاین پترن Observer
در این دیزاین پترن ما کلاسی داریم تحت عنوان Observer که کار مشاهده کننده را انجام میدهد. این کلاس abstract است و صرفا به عنوان parent مورد استفاده قرار خواهد گرفت.
abstract class Observer { protected MainSubject Subject; public abstract void Update(); }
سه کلاس دیگر از این کلاس ارث برده اند که به شکل زیر هستند.
class Observer1 : Base.Observer { public Observer1(MainSubject subject) { Subject = subject; Subject.AttachObserver(this); } public override void Update() { Console.WriteLine("Observer 1 State : " + Subject.GetState()); } }
class Observer2 : Base.Observer { public Observer2(MainSubject subject) { Subject = subject; Subject.AttachObserver(this); } public override void Update() { Console.WriteLine("Observer 2 State : " + Subject.GetState()); } }
class Observer3 : Base.Observer { public Observer3(MainSubject subject) { Subject = subject; Subject.AttachObserver(this); } public override void Update() { Console.WriteLine("Observer 3 State : " + Subject.GetState()); } }
حالا به MainSubject میرسیم. این کلاس تمامی کارهای مورد نیاز ما را دارد.
class MainSubject { private List ObserversList = new List(); private int State = 0; public int GetState() { return State; } public void SetState(int state) { State = state; NotifyAllObservers(); } public void AttachObserver(Base.Observer observer) { if (ObserversList == null) ObserversList = new List(); ObserversList.Add(observer); } public void NotifyAllObservers() { foreach (var item in ObserversList) { item.Update(); } } }
در این کلاس لیستی از Observer ها را داریم. با استفاده از متد Attatch میتوانیم Observerای اضافه کنیم.
اصلی ترین متد، متد NotifyAllObservers هست. این متد به تمامی اعضای لیست دستور Update شدن را میدهد.
اگر دقت کنید به محض صدا زدن متد SetState این متد NotifyAllObservers هم صدا زده میشود.
حال به سراغ متد main میرویم.
static void Main(string[] args) { try { MainSubject subject = new MainSubject(); new Observer1(subject); new Observer2(subject); new Observer3(subject); subject.SetState(10); subject.SetState(20); } catch (Exception ex) { ShowError(ex.Message); } Console.ReadLine(); }
در این متد ما شیئی از Observer های ۱و۲و۳ میسازیم و به محض تغییر در subject این تغییر در تمام Observer ها اعمال میشود و همگی آپدیت میشوند.
برای آموزش رایگان در مورد انواع دیزاین پترن ها و معماری های نرم افزار می توانید به این آموزش مراجعه نمایید:
معماری نرم افزار مهم ترین پترن های معماری نرم افزار
دیزاین پترن یا الگوی طراحی چیست؟
دیزاین پترن در حقیقت راه حل مسائل طراحی نرم افزار هستند که بارها و بارها در دنیای توسعه نرم افزار تکرار میشوند. الگوهایی از طراحی قابل استفاده مجدد (reusable) و تعامل اشیاء.
نظرات