抽象工厂使用对象组合,对象的创建被实现在工厂接口所暴露出来的方法中;

抽象工厂用来创建整个产品家族和将制造的相关产品集合起来,故当要改变产品时(新增,修改)就必须改变接口,抽象工厂中的产品经常会用工厂方法实现。

抽象工厂模式的结构如下:

//产品接口

public interface AbstractFactoryInterface1 {

}

 

public interface AbstractFactoryInterface2 {

}

 

//产品具体实现类

public class FactoryA1 implements AbstractFactoryInterface1 {

         public FactoryA1() {

                  System.out.println(“FactoryA1”);

}

}

 

public class FactoryA2 implements AbstractFactoryInterface1 {

         public FactoryA2() {

                  System.out.println(“FactoryA2”);

}

}

 

public class FactoryB1 implements AbstractFactoryInterface2 {

         public FactoryB1() {

                  System.out.println(“FactoryB1”);

}

}

 

public class FactoryB2 implements AbstractFactoryInterface2 {

         public FactoryB2() {

                  System.out.println(“FactoryB2”);

}

}

 

//抽象工厂方法接口

public interface AbstractFactory {

         public AbstractFactoryInterface1 createFactoryA();

public AbstractFactoryInterface2 createFactoryB();

}

 

 

//抽象工厂方法具体实现类

public class ConcreteFactory1 implements AbstractFactory {

         public AbstractFactoryInterface1 createFactoryA(){

         return new FactoryA1();

}       

         public AbstractFactoryInterface2 createFactoryB() {

         return new FactoryB1();

}

}

 

public class ConcreteFactory2 implements AbstractFactory {

         public AbstractFactoryInterface1 createFactoryA(){

         return new FactoryA2();

}       

         public AbstractFactoryInterface2 createFactoryB() {

         return new FactoryB2();

}

}

 

//客户端的调用

public class Client {

         public static void main(String [] args) {

                  AbstractFactory f1 = new ConcreteFactory1();

        AbstractFactoryInterface1 a1 = f1. createFactoryA();

                   AbstractFactoryInterface2 b1 = f1. createFactoryB();

 

                   AbstractFactory f2 = new ConcreteFactory2();

        AbstractFactoryInterface1 a2 = f1. createFactoryA();

                   AbstractFactoryInterface2 b2 = f1. createFactoryB();

}

}