برنامه نویسی

سی شارپ | درک الگوی مشاهده گر

Summarize this content to 400 words in Persian Lang

الگوی مشاهده‌گر یک الگوی طراحی رفتاری است که در آن یک شی، که به عنوان سوژه شناخته می‌شود، فهرستی از وابستگان خود به نام مشاهده‌گر را نگه می‌دارد و آنها را از هرگونه تغییر حالت آگاه می‌کند، معمولاً با فراخوانی یکی از روش‌های آن‌ها. این الگو باعث تقویت جفت آزاد بین اشیا می شود، زیرا ناظران فقط از موضوع آگاه هستند و نه از یکدیگر. در سی شارپ، این الگو معمولا در برنامه نویسی رویداد محور استفاده می شود.

پیاده سازی

بیایید الگوی Observer را از طریق یک مثال دقیق در سی شارپ درک کنیم.

رابط موضوعی

ابتدا یک رابط برای موضوع تعریف می کنیم. این رابط شامل روش هایی برای ثبت نام، لغو ثبت نام و اطلاع رسانی به ناظران خواهد بود.

public interface ISubject
{
void RegisterObserver(IObserver observer);
void UnregisterObserver(IObserver observer);
void NotifyObservers();
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

رابط مشاهده گر

در مرحله بعد یک رابط برای مشاهده گر تعریف می کنیم. این رابط حاوی روشی خواهد بود که سوژه زمانی که نیاز به اطلاع ناظران داشته باشد با آن تماس می گیرد.

public interface IObserver
{
void Update();
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

موضوع بتن

حال، بیایید یک کلاس موضوعی مشخص را پیاده سازی کنیم که این را پیاده سازی می کند ISubject رابط.

public class ConcreteSubject : ISubject
{
private ListIObserver> observers = new ListIObserver>();

public void RegisterObserver(IObserver observer)
{
observers.Add(observer);
}

public void UnregisterObserver(IObserver observer)
{
observers.Remove(observer);
}

public void NotifyObservers()
{
foreach (var observer in observers)
{
observer.Update();
}
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مشاهده گر بتن

در مرحله بعد، اجازه دهید یک کلاس مشاهده گر بتن را پیاده سازی کنیم که این را پیاده سازی می کند IObserver رابط.

public class ConcreteObserver : IObserver
{
public void Update()
{
Console.WriteLine(“Observer notified of state change.”);
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال استفاده

حالا بیایید ببینیم چگونه می توانیم از این کلاس ها با هم استفاده کنیم.

class Program
{
static void Main(string[] args)
{
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer1 = new ConcreteObserver();
ConcreteObserver observer2 = new ConcreteObserver();

subject.RegisterObserver(observer1);
subject.RegisterObserver(observer2);

subject.NotifyObservers();

subject.UnregisterObserver(observer1);

subject.NotifyObservers();
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، ConcreteSubject موضوع است و ConcreteObserver ناظر است چه زمانی NotifyObservers() فراخوانی می شود، هر دو ناظر از تغییر حالت مطلع می شوند. پس از لغو ثبت نام یک ناظر، فقط به ناظر باقی مانده اطلاع داده می شود.

بعدش چی؟

الگوی Observer یک راه قدرتمند برای پیاده سازی ارتباط بین اشیا در سی شارپ است. این اتصال شل را ترویج می کند و می تواند به ویژه در معماری های رویداد محور مفید باشد. با درک و پیاده سازی این الگو می توانید کدهای قابل نگهداری و مقیاس پذیرتری بنویسید.

الگوی مشاهده‌گر یک الگوی طراحی رفتاری است که در آن یک شی، که به عنوان سوژه شناخته می‌شود، فهرستی از وابستگان خود به نام مشاهده‌گر را نگه می‌دارد و آنها را از هرگونه تغییر حالت آگاه می‌کند، معمولاً با فراخوانی یکی از روش‌های آن‌ها. این الگو باعث تقویت جفت آزاد بین اشیا می شود، زیرا ناظران فقط از موضوع آگاه هستند و نه از یکدیگر. در سی شارپ، این الگو معمولا در برنامه نویسی رویداد محور استفاده می شود.

پیاده سازی

بیایید الگوی Observer را از طریق یک مثال دقیق در سی شارپ درک کنیم.

رابط موضوعی

ابتدا یک رابط برای موضوع تعریف می کنیم. این رابط شامل روش هایی برای ثبت نام، لغو ثبت نام و اطلاع رسانی به ناظران خواهد بود.

public interface ISubject
{
    void RegisterObserver(IObserver observer);
    void UnregisterObserver(IObserver observer);
    void NotifyObservers();
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

رابط مشاهده گر

در مرحله بعد یک رابط برای مشاهده گر تعریف می کنیم. این رابط حاوی روشی خواهد بود که سوژه زمانی که نیاز به اطلاع ناظران داشته باشد با آن تماس می گیرد.

public interface IObserver
{
    void Update();
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

موضوع بتن

حال، بیایید یک کلاس موضوعی مشخص را پیاده سازی کنیم که این را پیاده سازی می کند ISubject رابط.

public class ConcreteSubject : ISubject
{
    private ListIObserver> observers = new ListIObserver>();

    public void RegisterObserver(IObserver observer)
    {
        observers.Add(observer);
    }

    public void UnregisterObserver(IObserver observer)
    {
        observers.Remove(observer);
    }

    public void NotifyObservers()
    {
        foreach (var observer in observers)
        {
            observer.Update();
        }
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مشاهده گر بتن

در مرحله بعد، اجازه دهید یک کلاس مشاهده گر بتن را پیاده سازی کنیم که این را پیاده سازی می کند IObserver رابط.

public class ConcreteObserver : IObserver
{
    public void Update()
    {
        Console.WriteLine("Observer notified of state change.");
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال استفاده

حالا بیایید ببینیم چگونه می توانیم از این کلاس ها با هم استفاده کنیم.

class Program
{
    static void Main(string[] args)
    {
        ConcreteSubject subject = new ConcreteSubject();
        ConcreteObserver observer1 = new ConcreteObserver();
        ConcreteObserver observer2 = new ConcreteObserver();

        subject.RegisterObserver(observer1);
        subject.RegisterObserver(observer2);

        subject.NotifyObservers();

        subject.UnregisterObserver(observer1);

        subject.NotifyObservers();
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، ConcreteSubject موضوع است و ConcreteObserver ناظر است چه زمانی NotifyObservers() فراخوانی می شود، هر دو ناظر از تغییر حالت مطلع می شوند. پس از لغو ثبت نام یک ناظر، فقط به ناظر باقی مانده اطلاع داده می شود.

بعدش چی؟

الگوی Observer یک راه قدرتمند برای پیاده سازی ارتباط بین اشیا در سی شارپ است. این اتصال شل را ترویج می کند و می تواند به ویژه در معماری های رویداد محور مفید باشد. با درک و پیاده سازی این الگو می توانید کدهای قابل نگهداری و مقیاس پذیرتری بنویسید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا