抽象工厂模式
意图:
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
使用条件:一系列接口有一系列的实现
UML图:
例如:
首先,建立productA、productB产品族的两个抽象类:
public abstract class productA
{
public void productA(){System.out.println("productA");}
public void f(){};
}
public abstract class productB
{
public void productB(){System.out.println("productB");}
public void f(){};
}
//如果还有其他的抽象产品,在添加 一个 abstract class productC 即可。
其次,建立A、B的两个具体的产品类:
public class pA1 extends productA //抽象productA 的一个具体产品,还可以添加 class pA3等等
{
public pA1(){System.out.println("juti productA1");}
public void f(){};
}
public class pA2 extends productA
{
public pA2(){System.out.println("juti productA2");}
public void f(){};
}
public class pB1 extends productB
{
public pB1(){System.out.println("juti productB1");}
public void f(){};
}
public class pB2 extends productB
{
public pB2(){System.out.println("juti productB2");}
public void f(){};
}
然后再建立一个抽象的工厂类,以便用继承来创建不同的工厂:
public abstract class abstractF
{
public abstract productA creatorA();
public abstract productB creatorB();
//如果有productC ,在这里添加一个方法即可创建之
}
接着便是创建不同的工厂,以便造出不同的产品:
public class factory1 extends abstractF //如果有其他的具体产品,则添加factory3即可创建了
{
public productA creatorA(){return new pA1();}
public productB creatorB(){return new pB1();}
}
public class factory2 extends abstractF
{
public productA creatorA(){return new pA2();}
public productB creatorB(){return new pB2();}
}
最后就是一个测试类了:
public class test
{
public static void main(String[] args)
{
factory1 a=new factory1();
productA pa1=a.creatorA();pa1.productA();//通过一工厂创建第1种类的produtA;
productB pb1=a.creatorB();
factory2 b=new factory2();
b.creatorA(); //通过二工厂创建第2种类的productA;
b.creatorB();
}
}