デザインパターン:デコレータとプロキシ

Published at March 7, 2025, 1:59 a.m. by admin@senrigan.org

ChatGPTにデコレータパターンとプロキシパターンについて聞いた。

「オブジェクトのラッパーとして動作する」という点において似ている。違いは?

Decorator

オブジェクトの機能を柔軟に拡張する

  • クラスを継承せずに動的に機能を追加できる
  • 既存のクラスにバグを埋め込まない

もう少し具体的には、デコレータクラスのオブジェクトを生成するとき、機能を追加したい元のオブジェクトを引数にとって、内部でそいつを呼び出してそれにプラスアルファの処理をするイメージ。

Proxy

オブジェクトへのアクセスを制御・管理する

  • 同じインターフェースでアクセスを仲介する (クライアントからは違いがわからない)
  • リモートオブジェクトを操作する

例えばDBへのアクセスで、データがキャッシュされていたらそれを返す、されていなかったらDBへアクセスしてそれを返す。

リモートオブジェクト??別のマシン、別のアドレス空間で動作しているオブジェクトのこと。

要は、デコレータは拡張、プロキシは制御に使う。