메모 내 개인 웹사이트에서 다른 게시물을 확인할 수 있습니다: 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 Listobservers = new List (); 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()가 호출되면 두 관찰자 모두 상태 변경에 대한 알림을 받습니다. 한 명의 관찰자를 등록 취소하면 나머지 관찰자에게만 알림이 전송됩니다.
관찰자 패턴은 C#에서 개체 간 통신을 구현하는 강력한 방법입니다. 이는 느슨한 결합을 촉진하며 이벤트 기반 아키텍처에 특히 유용할 수 있습니다. 이 패턴을 이해하고 구현하면 유지 관리 및 확장이 더 용이한 코드를 작성할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3