プロキシパターン

プロキシ パターンは、構造設計パターンを指します。
このパターンは、クラス層を通じてクラスを操作するテクニックを説明します。プロキシ。プロキシを使用すると、元のクラスのインターフェイスを維持しながら、元の動作を維持しながら、元のクラスの機能を変更できます。
状況を想像してみましょう – 2015年、西ヨーロッパのある国は、統計を改善し、国民の政治的感情を深く理解するために、その国のユーザーのWebサイトへのすべてのリクエストを記録することを決定しました。
市民がインターネットにアクセスするために使用するゲートウェイの単純な実装の擬似コードを想像してみましょう。

class InternetRouter {

    private let internet: Internet

    init(internet: Internet) {
        self.internet = internet
    }

    func handle(request: Request, from client: Client) -> Data {
        return self.internet.handle(request)
    }

}

上記のコードでは、インターネット アクセスを提供するオブジェクトへのポインターを含むインターネット ルーター クラスを作成します。クライアントが Web サイトにリクエストを送信すると、インターネットから応答が返されます。

プロキシ パターンとシングルトン アンチパターンを使用して、クライアント名と URL をログに記録する機能を追加します。

class InternetRouterProxy {

    private let internetRouter: InternetRouter

    init(internet: Internet) {
        self.internetRouter = InternetRouter(internet: internet)
    }

    func handle(request: Request, from client: Client) -> Data {

        Logger.shared.log(“Client name: \(client.name), requested URL: \(request.URL)”)

        return self.internetRouter.handle(request: request, from: client)
    }

}

プロキシ クラス InternetRouterProxy には元の InternetRouter インターフェイスが保存されているため、初期化クラスを InternerRouter からそのプロキシに置き換えるだけで十分であり、コード ベースをさらに変更する必要はありません。

ソース

https://refactoring.guru/ru/design-patterns/プロキシ