Abstract Factory パターン
MyMain
public class MyMain {
public static void main(String args[]) {
MyFactory factory = MySimpleFactory.getFactory(args[0]);
if (factory == null) return;
MyClassA classA = factory.getMyClassA();
MyClassB classB = factory.getMyClassB();
System.out.println(classA.getName());
System.out.println(classA.getAge());
System.out.println(classB.getAddress());
System.out.println(classB.getFloor());
}
}
MySimpleFactory
public class MySimpleFactory {
public static MyFactory getFactory(String owner) {
if (owner.equals("Suzuki")) {
return new MyFactory1();
} else if (owner.equals("Tanaka")) {
return new MyFactory2();
} else {
return null;
}
}
}
MyFactory
public abstract class MyFactory {
protected MyClassA myClassA;
protected MyClassB myClassB;
public MyFactory() {
myClassA = createMyClassA();
myClassB = createMyClassB();
}
public MyClassA getMyClassA() {
return myClassA;
}
public MyClassB getMyClassB() {
return myClassB;
}
protected abstract MyClassA createMyClassA();
protected abstract MyClassB createMyClassB();
}
MyFactory1
public class MyFactory1 extends MyFactory {
protected MyClassA createMyClassA() {
return new MyClassA1();
}
protected MyClassB createMyClassB() {
return new MyClassB1();
}
}
MyFactory2
public class MyFactory2 extends MyFactory {
protected MyClassA createMyClassA() {
return new MyClassA2();
}
protected MyClassB createMyClassB() {
return new MyClassB2();
}
}
MyClassA
public abstract class MyClassA {
public abstract String getName();
public abstract int getAge();
}
MyClassA1
public class MyClassA1 extends MyClassA {
public String getName() {
return "Suzuki";
}
public int getAge() {
return 20;
}
}
MyClassA2
public class MyClassA2 extends MyClassA {
public String getName() {
return "Tanaka";
}
public int getAge() {
return 30;
}
}
MyClassB
public abstract class MyClassB {
public abstract String getAddress();
public abstract int getFloor();
}
MyClassB1
public class MyClassB1 extends MyClassB {
public String getAddress() {
return "Tokyo";
}
public int getFloor() {
return 2;
}
}
MyClassB2
public class MyClassB2 extends MyClassB {
public String getAddress() {
return "Yokohama";
}
public int getFloor() {
return 3;
}
}
実行結果
L:\>java MyMain Suzuki
Suzuki
20
Tokyo
2
L:\>java MyMain Tanaka
Tanaka
30
Yokohama
3