Python

Python デザインパターンを学ぶ Proxyパターン

概要

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")