検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
当サイトのドメイン名は " getwebtips.net " です。
トップレベルドメインは .net であり、他の .com / .shop といったトップレベルドメインのサイトとは一切関係ありません。
practical_python_design_patterns

Practical Python Design Patterns - Python で学ぶデザインパターン: The Proxy Pattern - Part. 3 「プロキシパターン - ダメ押し確認」の巻 投稿一覧へ戻る

Published 2022年6月11日19:02 by T.Tsuyoshi

SUPPORT UKRAINE

- Your indifference to the act of cruelty can thrive rogue nations like Russia -

Practical Python Design Patterns - The Proxy Pattern 編

Parting Shots
(ダメ押し確認)

この章で取り上げたキャッシュプロキシ以外にも、ネットワーク等々様々な場面でプロキシが利用されていることが分かったと思います。クライアントには「直に」そのオブジェクトやリソースを利用しているように思わせつつ実際には様々な形で制御を行いたい場合、プロキシパターンの採用を考慮すべきでしょう。プロキシパターンを実装することで、他のオブジェクトをラップしてその実行方法に手を加えることができる一方、クライアントはオリジナルのオブジェクトを利用する場合と全く同じパラメータを渡し、全く同じ結果を取得できるためその存在に気付きません。
プロキシパターンは一般的に以下の3つのパートから構成されます:
Client (クライアント): あるオブジェクト、リソースの利用者です
Object (オブジェクト): クライアントが実際に利用したいターゲットです
Proxy (プロキシ): オブジェクトに対するアクセス制御を行います
クライアントはプロキシをインスタンス化し、ターゲットであるオブジェクト自身であることを疑わずにやり取りを行います。
Python は動的型付け言語 (dynamically typed language) ですから、プロキシがオブジェクトと同じインターフェースを持つことを保証するためのインターフェースクラス (interface class) や抽象クラス (abstract class) を定義する必要はありません。プロキシがオブジェクトと同じ属性を有してさえいれば「それはターゲットオブジェクトのように見えるしターゲットオブジェクトのように振舞うからターゲットオブジェクトに違いない」というダックタイピングによる判断のもと、クライアントコードは何の疑いもなくプロキシをターゲットオブジェクトとして扱います。
「プロキシ」という用語に馴染めないのなら、ウェブプロキシ (web proxy) といった身近にある例を考えてみることをお勧めします。会社のパソコンからインターネットに接続する際、あなた (クライアント) はまず間違いなくプロキシに接続しています。しかし接続するたびにいちいち「今私はプロキシを通してインターネットに接続している」などと考えるでしょうか?多分考えないと思います。それは、通常接続するのと何ら変わらない方法でインターネットに接続し、やり取りを行えているからではないでしょうか?
実はこれこそが「プロキシパターン (proxy pattern)」と「アダプターパターン (adapter pattern)」の決定的な違いです。クライアントは、ターゲットとするオブジェクトと同じインターフェースを備え、バックグラウンドでは追加操作を実行しているプロキシをターゲットと認識して利用します。一方、クライアントは、ターゲットとするオブジェクトとは異なるインターフェースを備えたアダプターを利用して、ターゲットの機能をより「望ましい」インターフェースで利用します。

この投稿をメールでシェアする

0 comments

コメントはまだありません。

コメントを追加する(不適切と思われるコメントは削除する場合があります)