【デザインパターン】Proxyパターンをクラス図で理解する

デザインパターン

Proxyパターン

Proxyパターンは、別のオブジェクトのインターフェースとして機能するProxyクラスを作成し、間接的にそのオブジェクトのメソッドを実行するデザインパターンです。
自分なりにProxyパターンをクラス図にまとめてみました。

Proxyパターンのクラス図

Proxyパターンのクラス図

Proxyパターンのクラス図

Proxyパターンのクラス図の解説

Subjectインターフェースを実装するSubject1,2クラスがある時、直接Subject1,2のfuncを呼び出すのではなく、Proxyクラスのfuncメソッドから間接的にSubject1,2のfuncメソッドを呼び出す。こうすることで、Proxyクラスのfuncメソッドの中で処理を調整したり、Subject1,2どちらのオブジェクトのfuncを呼び出すかを切り分けたりすることができるようになる。

上記のクラス図ではProxyクラスの属性にSubject型の属性subjectを設け、そこにSubject1,2のオブジェクトを格納するようにしているが、この属性を設けずに、funcメソッド内で直接Subject1,2のインスタンス化を行い、そのfuncメソッドを呼び出す形にしても構わない。

さらにFlyweightパターンと組み合わせ、Subject1,2のオブジェクトをProxyクラス内に格納するようにしておくこともできる。

Proxyパターンを用いることで、呼び出し側はProxyクラスのメソッドを実行することで、目的のオブジェクトのメソッドを呼び出すことができるようになる。この目的のオブジェクトを変更することになった場合も、Proxyパターンを用いていれば、呼び出し側の処理を変更する必要がなくなる。

PlantUMLでProxyパターンのクラス図を記述する

Proxyパターンのクラス図をPlantUMLで書いたときのソースです。

@startuml Proxy
interface Subject{
  + {abstract} func()
}
class Proxy implements Subject{
  - subject : Subject
  + func() //属性subjectのfuncを呼び出す
}
class Subject1 implements Subject{
  + func()
}
class Subject2 implements Subject{
  + func()
}
Proxy o--> Subject1
Proxy o--> Subject2
@enduml

参考サイトURL

Proxy パターン – Wikipedia
PHPによるデザインパターン入門 – Proxy〜具体的な実装を隠す身代わり – Do You PHP はてブロ