Proxy パターン

Proxy パターン

MyMain

public class MyMain {
    public static void main(String args[]) {
        // 代理人クラスを使用しているか、
        // 本物のクラスを使用しているか、わからない
        MyClass classA = new MyProxy(args[0]);
        System.out.println(classA.getName());
    }
}

MyClass

public interface MyClass {
    public String getName();
}

MyClassA

public class MyClassA implements MyClass {
    public String getName() {
        return "Suzuki";
    }
}

MyProxy

// classA の 代理人クラス
// classA と 同じインターフェースを使用
public class MyProxy implements MyClass {
    private MyClass classA;

    public MyProxy(String isReal) {
        // 本物のクラスを使用
        if (isReal.equals("1"))
            classA = new MyClassA();
    }

    public String getName() {
        // 代理人クラスを使用
        if (classA == null)
            return "dummy";

        // 本物のクラスを使用
        return classA.getName();
    }
}

実行結果

L:\>java MyMain  0
dummy

L:\>java MyMain  1
Suzuki