1:使用场景
一个产品族有相同的约束时,可以使用抽象工厂模式
2:UML图
3:代码举例:
public abstract class AbstractProductA {
public abstract void method();
}
public abstract class AbstractProductB {
public abstract void method();
}
public class ConcreteProductA1 extends AbstractProductA{
@Override
public void method(){
System.out.println("我是具体产品A1");
}
}
public class ConcreteProductA2 extends AbstractProductA{
@Override
public void method(){
System.out.println("我是具体产品A2");
}
}
public class ConcreteProductB1 extends AbstractProductB{
@Override
public void method(){
System.out.println("我是具体产品B1");
}
}
public class ConcreteProductB2 extends AbstractProductB{
@Override
public void method(){
System.out.println("我是具体产品B2");
}
}
public abstract class AbstractFactory {
public abstract AbstractProductA createProductA();
public abstract AbstractProductB createProductB();
}
public class ConcreteFactory1 extends AbstractFactory{
public AbstractProductA createProductA(){
return new ConcreteProductA1();
}
public AbstractProductB createProductB(){
return new ConcreteProductB1();
}
}
public class ConcreteFactory2 extends AbstractFactory{
public AbstractProductA createProductA(){
return new ConcreteProductA2();
}
public AbstractProductB createProductB(){
return new ConcreteProductB2();
}
}
public class Client {
public static void main(String[] args){
AbstractFactory factory1 =new ConcreteFactory1();
AbstractProductA productA1=factory1.createProductA();
AbstractProductB productB1=factory1.createProductB();
productA1.method();
productB1.method();
AbstractFactory factory2 =new ConcreteFactory2();
AbstractProductA productA2=factory2.createProductA();
AbstractProductB productB2=factory2.createProductB();
productA2.method();
productB2.method();
}
}
4: Android中的抽象工厂模式