سعید صفایی | SAEED SAFAEE
Observer Design Pattern الگوی طراحی
Observer Design Pattern الگوی طراحی
یک شبکه اجتماعی رو در نظر بگیرید که فردی به پستی را انتشار میدهد و برنامه باید به دنبال کننده های آن اطلاع دهد
اجرا میکنیم observerاین روش را با پترن
IObserverابتدا اینترفیسی با نام
(نام ها برای شناحت بهتر پترن استفاده می شود)
interface IObserver
{Task Update(string name, string massge);
}
IPersonسپس اینترفیس کاربر
interface IPerson
{Task Add(IObserver model);
Task Remove(IObserver model);
Task Send(string massege);
}
به عنوان شخص انتشار دهنده پستPublisherاکنون
class Publisher: IPerson
{
public string _name { get; set; }
public List<IObserver> Flowers = new List<IObserver>();public Publisher(string name)
{
_name = name;
}public async Task SendMasage(string massage)
{
Console.WriteLine(_name + " say: " + massage);
Send(massage);
}public async Task Add(IObserver model)
{
Flowers.Add(model);
}public async Task Remove(IObserver model)
{
Console.WriteLine("remove");
}public async Task Send(string massege)
{
foreach (var item in Flowers)
{
item.Update(_name, massege);
}
}
}
حال کلاس افرادی که گیرنده پست هستند
class Person : IObserver
{
public string _name { get; set; }
public Person(string name)
{
_name = name;
}public async Task Update(string name, string massge)
{
Console.WriteLine(_name + " Resive massage from " + name + ": " + massge);
}
}
حال برنامه اصلی را اینگونه پیاده سازی و اجرا میکنیم
static void Main(string[] args)
{
Publisher account = new Publisher("Saeed Safaee");Person p = new Person("Ali");
Person p۲ = new Person("Behroz");account.Add(p);
account.Add(p۲);account.SendMasage("Salam be hame");
}
خروجی به شکل زیر خواهد بود:
Saeed Safaee say: Salam be hame
Ali Resive massage from Saeed Safaee: Salam be hame
Behroz Resive massage from Saeed Safaee: Salam be hame