抽象工厂模式:为创建一组相关或互相以来的对象提供一个接口,而且无需制定它们的具体类。
抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂产生需要的对象是非常好的解决方式。即工厂方法只满足单一条件商品的创建,而若对商品进行另一条件分类时,就显得乏力了。抽象工厂是将工厂细分,通过接口回调子工厂的方式实现高内聚的。
package demo; /** * 抽象产品类 * @author zhf * */ public abstract class AbstractProductA { //每个产品共有的方法 public void shareMethod(){ } //每个产品相同方法,不同实现 public abstract void doSomething(); } package demo; /** * 抽象产品类 * @author zhf * */ public abstract class AbstractProductB { //每个产品共有的方法 public void shareMethod(){ } //每个产品相同方法,不同实现 public abstract void doSomething(); } package demo; public class ProductA1 extends AbstractProductA { @Override public void doSomething() { //产品一的实现方法 } } package demo; public class ProductA2 extends AbstractProductA { @Override public void doSomething() { //产品二的实现方法 } } package demo; public class ProductB1 extends AbstractProductB { @Override public void doSomething() { //产品一的实现方法 } } package demo; public class ProductB2 extends AbstractProductB { @Override public void doSomething() { //产品二的实现方法 } } package demo; public abstract class AbstractCreator { public abstract AbstractProductA createProductA(); public abstract AbstractProductB createProductB(); } package demo; /** * 产品等级1的实现类 * @author zhf * */ public class Creator1 extends AbstractCreator{ @Override public AbstractProductA createProductA() { return new ProductA1(); } @Override public AbstractProductB createProductB() { // TODO Auto-generated method stub return new ProductB1(); } } package demo; /** * 产品等级2 * @author zhf * */ public class Creator2 extends AbstractCreator{ @Override public AbstractProductA createProductA() { // TODO Auto-generated method stub return new ProductA2(); } @Override public AbstractProductB createProductB() { // TODO Auto-generated method stub return new ProductB2(); } } package demo; public class Client { public static void main(String[] args) { AbstractCreator creator1 = new Creator1(); AbstractCreator creator2 = new Creator2(); AbstractProductA a1 = creator1.createProductA(); AbstractProductA a2 = creator2.createProductA(); AbstractProductB b1= creator1.createProductB(); AbstractProductB b2= creator2.createProductB(); } }