概要
Proxyパターン(Proxy、読みはプロキシ)は、オブジェクトやサービスとそのユーザーの間に、プロキシや中間的なインターフェースを作成する。
プロキシは、ユーザーがオブジェクトやサービスにアクセスすることを可能にすると同時に、呼び出しを追加機能でラップする可能性もある。このパターンは、呼び出しをインターセプトすることで、意味のある最適化(キャッシング/キューイング)やセキュリティの追加(認証/サニタイズ)が可能になる場合に有効。
この例では、プロキシを介してサーバ上のリソースと対話するためのリクエストを送信するプロセスをシミュレートする。ここで実装されたプロキシは、リソースのキャッシュバージョンへのポインタを格納する。読み込み要求に対しては、サーバに送る前にキャッシュをチェックする。また、書き込みや新たな読み取りのためのキャッシュの更新も行う。
実装例
class ServerResource:
def read(self, query):
print("Reading from ", self.__class__.__name__)
pass
def write(self, data):
print("Writing to ", self.__class__.__name__)
pass
class CachedResource(ServerResource):
pass
class Proxy:
def __init__(self):
self._resource = ServerResource()
self._cache = CachedResource()
def read(self, query):
cached_result = self._cache.read(query)
if cached_result:
return cached_result
server_result = self._resource.read(query)
self._cache.write(server_result)
return server_result
def write(self, data):
self._cache.write(data)
return self._resource.write(data)
if __name__ == "__main__":
proxy = Proxy()
proxy.read("query")
proxy.write("data")