Facade パターン

Facade パターン

Step 1

MyMain

public class MyMain {
    public static void main(String args[]) {
        MyClassA classA = new MyClassA();
        System.out.println(classA.getName());
        System.out.println(classA.getAge());

        MyClassB classB = new MyClassB();
        System.out.println(classB.getAddress());
        System.out.println(classB.getFloor());
    }
}

MyClassA

public class MyClassA {
    public String getName() {
        return "Suzuki";
    }
    public int getAge() {
        return 20;
    }
}

MyClassB

public class MyClassB {
    public String getAddress() {
        return "Tokyo";
    }
    public int getFloor() {
        return 2;
    }
}

実行結果

L:\>java MyMain
Suzuki
20
Tokyo
2
Step 2 「Facade パターン」

MyMain

public class MyMain {
    public static void main(String args[]) {
        // インターフェースにだけ依存
        // 各クラスの実装に依存しない
        IMyFacade facade = new MyFacadeA();
        System.out.println(facade.getProperty());

        facade = new MyFacadeB();
        System.out.println(facade.getProperty());
    }
}

MyClassA

// 変更なし
public class MyClassA {
    public String getName() {
        return "Suzuki";
    }
    public int getAge() {
        return 20;
    }
}

MyClassB

// 変更なし
public class MyClassB {
    public String getAddress() {
        return "Tokyo";
    }
    public int getFloor() {
        return 2;
    }
}

IMyFacade

public interface IMyFacade {
    public String getProperty();
}

MyFacadeA

// ファサードクラスは インターフェースに依存
public class MyFacadeA implements IMyFacade {
    private MyClassA classA;

    public MyFacadeA() {
        classA = new MyClassA();
    }
    public String getProperty() {
        String result = "";
        result += classA.getName();
        result += "\n";
        result += classA.getAge();
        return result;
    }
}

MyFacadeB

// ファサードクラスは インターフェースに依存
public class MyFacadeB implements IMyFacade {
    private MyClassB classB;

    public MyFacadeB() {
        classB = new MyClassB();
    }
    public String getProperty() {
        String result = "";
        result += classB.getAddress();
        result += "\n";
        result += classB.getFloor();
        return result;
    }
}

実行結果

L:\>java MyMain
Suzuki
20
Tokyo
2