上两篇文章中,讲述了简单工厂以及工厂方法模式,在此就不做赘述了,本篇重点讲述抽象工厂模式;
抽象工厂模式(Abstract Factory Pattern)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂模式有四种角色,分别为:抽象工厂、具体工厂、抽象产品和具体产品,抽象工厂模式的类图如下:
通过上述类图可以很清楚的观察出各个角色之间的关系,产品系列里面有AbstractProductA和AbstractProductB两种类型,工厂系列里面有AbstractFactory一种工厂类型,该工厂有两个实现类,每个实现类均可产生产品A和产品B,下面写一个小例子看一下:
抽象产品及实现类
public interface AbstractProductA {
public void methodA1();
public void methodA2();
}
public class ProductA1 implements AbstractProductA {
@Override
public void methodA1() {
System.out.println("产品A等级为1的methodA1()");
}
@Override
public void methodA2() {
System.out.println("产品A等级为1的methodA2()");
}
}
public class ProductA2 implements AbstractProductA {
@Override
public void methodA1() {
System.out.println("产品A等级为2的methodA1()");
}
@Override
public void methodA2() {
System.out.println("产品A等级为2的methodA1()");
}
}
public interface AbstractProductB {
public void methodB1();
public void methodB2();
}
public class ProductB1 implements AbstractProductB {
@Override
public void methodB1() {
// TODO Auto-generated method stub
System.out.println("产品B等级为1的methodB1()");
}
@Override
public void methodB2() {
System.out.println("产品B等级为1的methodB2()");
}
}
public class ProductB2 implements AbstractProductB {
@Override
public void methodB1() {
// TODO Auto-generated method stub
System.out.println("产品B等级为2的methodB1()");
}
@Override
public void methodB2() {
System.out.println("产品B等级为2的methodB2()");
}
}
抽象工厂及其实现类
public interface AbstractFactory {
public AbstractProductA createPruductA();
public AbstractProductB createPruductB();
}
public class ConcreteFactory1 implements AbstractFactory {
@Override
public AbstractProductA createPruductA() {
// TODO Auto-generated method stub
return new ProductA1();
}
@Override
public AbstractProductB createPruductB() {
// TODO Auto-generated method stub
return new ProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
@Override
public AbstractProductA createPruductA() {
// TODO Auto-generated method stub
return new ProductA2();
}
@Override
public AbstractProductB createPruductB() {
// TODO Auto-generated method stub
return new ProductB2();
}
}
抽象工厂模式提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类,抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么,抽象工厂的任务就是定义一个负责负责创建一组产品的接口。这个接口内的每个方法创建一个具体产品,同时我们可以利用实现抽象工厂的子类提供这些具体的做法,好的,工厂模式的三种例子就介绍到这!