抽象工厂模式
(Abstract Factory Pattern)是一种创建型设计模式,它用于创建相关
或相互依赖对象
的一组,而无需指定
其具体的类
。这种模式特别适用于产品族
的情况,即一组相互关联的产品对象
。
存在四种角色:
角色1:抽象工厂角色
:担任这个角色的是工厂方法模式的核心
,它是与应用系统商业逻辑无关的
。
角色2:具体工厂角色
:这个角色直接在客户端的调用下创建产品的实例
。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的
。
角色3:抽象产品角色
:担任这个角色的类是工厂方法模式所创建的对象的父类
,或它们共同
拥有的接口
。
角色4:具体产品角色
:抽象工厂模式所创建
的任何产品对象都是某一个具体产品类的实例
。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
优点包括:
1.具体产品在应用层代码隔离
,无须关心创建细节。
2.将一个系列的产品族
统一到一起创建
。
主要缺点:
规定了所有可能被创建的产品集合,产品族中扩展
新的产品困难
,需要修改抽象工厂的接口。
增加了系统的抽象性和理解难度。
示例:
定义了两个产品接口
ProductA和ProductB,以及它们的具体实现
ConcreteProductA1和ConcreteProductB1。然后定义了一个工厂接口
Factory和一个具体工厂
ConcreteFactory,它负责创建产品对象。最后,在客户端代码中,我们通过工厂创建了产品对象并调用它们的方法
//抽象产品A
public interface ProductA {void useProductA();
}
// 具体产品A1
public class ConcreteProductA1 implements ProductA{@Overridepublic void useProductA() {System.out.println("使用产品A1");}
}
//抽象产品B
interface ProductB {void useProductB();
}
//具体产品B1
public class ConcreteProductB1 implements ProductB {@Overridepublic void useProductB() {System.out.println("使用产品B1");}
}
// 抽象工厂
public interface Factory {ProductA createProductA();ProductB createProductB();
}
// 具体工厂
public class ConcreateFactory implements Factory{@Overridepublic ProductA createProductA() {System.out.println("具体产品实例化A1");return new ConcreteProductA1();}@Overridepublic ProductB createProductB() {System.out.println("具体产品实例化B1");return new ConcreteProductB1();}
}
// 客户端调用测试
public class Client {public static void main(String[] args) {//工厂实例化Factory factory = new ConcreateFactory();//工厂调用ProductA productA = factory.createProductA();ProductB productB = factory.createProductB();productA.useProductA();productB.useProductB();}
}