proxyは日本語で「代理人」という意味になる.Proxyパターンは,オリジナルのオブジェクトへのアクセスを制御するための代理オブジェクトを提供し,オリジナルでなくても可能な処理を代理オブジェクトに任せ,代理オブジェクトで不可能な処理をオリジナルオブジェクトが処理するパターンである.
Proxyパターンの主な要素は以下である.
java// Subject
interface Subject {
void operation();
}
// Real Subject
class RealSubject implements Subject {
@Override
public void operation() {
System.out.println("RealSubject operation");
}
}
// Proxy
class Proxy implements Subject {
private Subject subject;
private String sentence;
public Proxy(Subject subject) {
this.subject = subject;
}
@Override
public void operation() {
if (sentence == null) {
subject.operation();
sentence = "Proxy operation";
} else {
System.out.println(sentence);
}
}
}
// Client
public class ProxyPattern {
public static void main(String[] args) {
Subject subject = new Proxy(new RealSubject());
subject.operation();
subject.operation();
subject.operation();
}
}
プロキシを追加することによって,利用者からみたメソッドの使い方を変えずに,特定の振る舞いを拡張させることができる.
これと逆?になるのがDecoratorで,Decoratorパターンは既存メソッドの振る舞いはそのままにして,新たなメソッドの追加を行っている.