プロキシ パターンは、構造設計パターンを指します。
このパターンは、クラス層を通じてクラスを操作するテクニックを説明します。プロキシ。プロキシを使用すると、元のクラスのインターフェイスを維持しながら、元の動作を維持しながら、元のクラスの機能を変更できます。
状況を想像してみましょう – 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/プロキシ