59. AbstractFactory.java
public abstract class AbstractFactory {
public static AbstractFactory createFactory(int factoryId){
switch(factoryId){
case ConcreteFactoryA.id:
return new ConcreteFactoryA();
case ConcreteFactoryB.id:
return new ConcreteFactoryB();
default:
return null;
}
}
public abstract AbstractProduct1 createProduct1();
public abstract AbstractProduct2 createProduct2();
public abstract AbstractProduct3 createProduct3();
}
60. ConcreteFactoryA.java
public class ConcreteFactoryA extends AbstractFactory {
public static final int id = 1;
public AbstractProduct1 createProduct1() {
return new ConcreteProductA1("工場A - 製品1");
}
public AbstractProduct2 createProduct2() {
return new ConcreteProductA2("工場A - 製品2");
}
public AbstractProduct3 createProduct3() {
return new ConcreteProductA3("工場A - 製品3");
}
}
61. ConcreteFactoryB.java
public class ConcreteFactoryB extends AbstractFactory {
public static final int id = 2;
public AbstractProduct1 createProduct1() {
return new ConcreteProductB1("工場B - 製品1");
}
public AbstractProduct2 createProduct2() {
return new ConcreteProductB2("工場B - 製品2");
}
public AbstractProduct3 createProduct3() {
return new ConcreteProductB3("工場B - 製品3");
}
}
62. Client.java
public class Client {
public static void main(String[] args) {
List<AbstractFactory> factorys = new ArrayList<AbstractFactory>();
factorys.add(AbstractFactory.createFactory(ConcreteFactoryA.id));
factorys.add(AbstractFactory.createFactory(ConcreteFactoryB.id));
Iterator<AbstractFactory> it = factorys.iterator();
while (it.hasNext()){
AbstractFactory factory = it.next();
AbstractProduct1 product1 = factory.createProduct1();
AbstractProduct2 product2 = factory.createProduct2();
AbstractProduct3 product3 = factory.createProduct3();
product1.execute();
product2.run();
product3.action();
}
}
}