注記 私の個人ウェブサイトで他の投稿をチェックできます: https://hbolajraf.net
オブザーバー パターンは、サブジェクトとして知られるオブジェクトが、オブザーバーと呼ばれるその依存関係のリストを維持し、通常はメソッドの 1 つを呼び出すことによって、状態の変化をオブザーバーに通知する動作設計パターンです。このパターンは、観察者がお互いではなく対象のみを認識するため、オブジェクト間の疎結合を促進します。 C# では、このパターンはイベント駆動型プログラミングでよく使用されます。
C# の詳細な例を通じてオブザーバー パターンを理解しましょう。
まず、主題のインターフェースを定義します。このインターフェースには、オブザーバーの登録、登録解除、および通知を行うためのメソッドが含まれます。
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() が呼び出されると、両方のオブザーバーに状態の変更が通知されます。 1 人のオブザーバーの登録を解除すると、残りのオブザーバーにのみ通知されます。
Observer パターンは、C# でオブジェクト間の通信を実装する強力な方法です。これは疎結合を促進し、イベント駆動型アーキテクチャで特に役立ちます。このパターンを理解して実装することで、より保守しやすくスケーラブルなコードを作成できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3