オブザーバーパターン

Observer パターンは、動作設計パターンを指します。
このパターンを使用すると、共通のインターフェイスを使用してオブジェクトの状態の変更をサブスクライバーに送信できます。
プログラマー向けのメッセンジャーを開発していて、アプリケーションにチャット画面があるとします。 「問題」と「エラー」または「何かがおかしい」という文字のメッセージが表示された場合は、エラー一覧画面や設定画面を赤色にする
必要があります。次に、問題を解決するための 2 つのオプションについて説明します。1 つ目はシンプルですがサポートが非常に困難で、2 つ目はサポートがはるかに安定していますが、最初の実装では頭を切り替える必要があります。

共通バス

パターンのすべての実装には、データ変更時のメッセージの送信、メッセージのサブスクライブ、メソッドでのさらなる処理が含まれています。共有バス オプションには、受信者にメッセージをディスパッチする単一のオブジェクト (通常はシングルトン) が含まれています。
実装の簡単さは次のとおりです。

<オル>

  • オブジェクトは抽象メッセージを共有バスに送信します
  • 共有バスに登録されている別のオブジェクトがメッセージをキャッチし、それを処理するかどうかを決定します。
  • Apple から利用可能な実装オプションの 1 つ (NSNotificationCenter サブシステム) では、配信時に受信者によって呼び出されるメソッドの名前とメッセージ ヘッダーの一致が追加されました。
    このアプローチの最大の欠点は、–メッセージをさらに変更する場合は、まずメッセージが処理および送信されるすべての場所を記憶し、手動で編集する必要があります。迅速な初期実装の後に、正しく動作するためのナレッジ ベースを必要とする長く複雑なサポートが続くケースもあります。

    マルチキャスト デリゲート

    この実装では、最終的なマルチキャスト デリゲート クラスを作成します。共有バスの場合と同様に、オブジェクトはこれをサブスクライブして「メッセージ」または「イベント」を受信できますが、メッセージの解析とフィルタリングの作業は次のとおりです。オブジェクトに割り当てられていません。代わりに、サブスクライバ クラスは、デリゲートに通知するためのデリゲートのマルチキャスト メソッドを実装する必要があります。
    これは、デリゲート インターフェイス/プロトコルを使用して実装されます。一般的なインターフェイスが変更されると、アプリケーションは構築されなくなり、その時点で、別のナレッジ ベースを維持することなく、特定のメッセージを処理するためにすべての場所をやり直す必要があります。これらの場所を思い出すために。 コンパイラはあなたの友達です。
    このアプローチでは、ドキュメントを書いたり保存したりする必要がなく、新しい開発者がメッセージとその引数がどのように処理されるかを理解しようとする必要がなく、代わりに便利でわかりやすいインターフェイスで作業できるため、チームの生産性が向上します。これは、コードによるドキュメント パラダイムが実装される方法です。
    >マルチキャスト デリゲート自体はデリゲート パターンに基づいています。これについては次の投稿で説明します。

    ソース

    https://refactoring.gu/ru/design-patterns/observer