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