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 はてブロ