为创建一组相关或相互依赖的对象提供一个接口, 而无须指定它们的具体类
/** * * 为创建一组相关或相互依赖的对象提供一个接口, * 而无须指定它们的具体类 * 一组对象之间存在相关或相互依赖的关系 * 此处声明A组产品 */ public abstract class AbstractProductA { //每个产品通用的方法 public void commonMethod(){ } //每个产品相同方法, 不同实现 public abstract void doSomething(); } /** * * 为创建一组相关或相互依赖的对象提供一个接口, * 而无须指定它们的具体类 * 一组对象之间存在相关或相互依赖的关系 * 此处声明B组产品 */ public abstract class AbstractProductB { //每个产品通用的方法 public void commonMethod(){ } //每个产品相同方法, 不同实现 public abstract void doSomething(); } public class ProductA1 extends AbstractProductA{ public void doSomething(){ System.out.println("Belong to ProductA1"); } } public class ProductA2 extends AbstractProductA{ public void doSomething(){ System.out.println("Belong to ProductA2"); } } public class ProductB1 extends AbstractProductB{ public void doSomething(){ System.out.println("Belong to ProductB1"); } } public class ProductB2 extends AbstractProductB{ public void doSomething(){ System.out.println("Belong to ProductB2"); } } public abstract class AbstractCreator { //创建A产品家族 public abstract AbstractProductA createProductA(); //创建B产品家族 public abstract AbstractProductB createProductB(); } public class Creator1 extends AbstractCreator { //创建等级为1的A产品 @Override public AbstractProductA createProductA() { // TODO Auto-generated method stub return new ProductA1(); } //创建 等级为1的B产品 @Override public AbstractProductB createProductB() { // TODO Auto-generated method stub return new ProductB1(); } } //有M个产品等级,就应该有M个实现工厂类 //在每个实现工厂中,实现不同产品族的生产任务 public class Creator2 extends AbstractCreator { //创建等级为2的A产品 @Override public AbstractProductA createProductA() { // TODO Auto-generated method stub return new ProductA2(); } //创建 等级为2的B产品 @Override public AbstractProductB createProductB() { // TODO Auto-generated method stub return new ProductB2(); } } public class Client { public static void main(String[] args) { // TODO Auto-generated method stub //定义出两个工厂 AbstractCreator creator1 = new Creator1(); AbstractCreator creator2 = new Creator2(); //生产等级为1的产品 AbstractProductA a1 = creator1.createProductA(); AbstractProductB b1 = creator1.createProductB(); //生产等级为2的产品 AbstractProductA a2 = creator2.createProductA(); AbstractProductB b2 = creator2.createProductB(); } }