>백엔드 개발 >C++ >C# | 관찰자 패턴 이해

C# | 관찰자 패턴 이해

王林
王林원래의
2024-07-23 20:44:151239검색

C# | Understanding the Observer Pattern

Note
You can check other posts on my personal website: https://hbolajraf.net

관찰자 패턴은 주체로 알려진 객체가 관찰자라고 하는 종속 항목 목록을 유지 관리하고 일반적으로 메소드 중 하나를 호출하여 상태 변경을 알리는 동작 설계 패턴입니다. 관찰자는 주제만 인식하고 서로는 인식하지 못하기 때문에 이 패턴은 개체 간의 느슨한 결합을 촉진합니다. C#에서는 이 패턴이 이벤트 중심 프로그래밍에 일반적으로 사용됩니다.

구현

C#의 상세한 예제를 통해 Observer Pattern을 이해해 봅시다.

주제 인터페이스

먼저 주제에 대한 인터페이스를 정의합니다. 이 인터페이스에는 관찰자 등록, 등록 취소 및 알림 방법이 포함되어 있습니다.

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

관찰자 인터페이스

다음으로 관찰자를 위한 인터페이스를 정의합니다. 이 인터페이스에는 주체가 관찰자에게 알려야 할 때 호출하는 메서드가 포함됩니다.

public interface IObserver
{
    void Update();
}

구체적인 주제

이제 ISubject 인터페이스를 구현하는 구체적인 주제 클래스를 구현해 보겠습니다.

public class ConcreteSubject : ISubject
{
    private List<IObserver> observers = new List<IObserver>();

    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()가 호출되면 두 관찰자 모두 상태 변경에 대한 알림을 받습니다. 참관인 1명 등록 취소 후 나머지 참관인에게만 통보됩니다.

다음은 무엇입니까?

관찰자 패턴은 C#에서 개체 간 통신을 구현하는 강력한 방법입니다. 이는 느슨한 결합을 촉진하며 이벤트 기반 아키텍처에 특히 유용할 수 있습니다. 이 패턴을 이해하고 구현하면 유지 관리 및 확장이 더 용이한 코드를 작성할 수 있습니다.

위 내용은 C# | 관찰자 패턴 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.