抽象工厂模式
简介
- 为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
使用场景
-
产品族有相同的约束时,可以使用抽象工厂模式,也就是先创建不同平台的工厂,每个工厂再创建具有共性的产品。
- 举个例子:Android与IOS手机工厂,可以抽象出抽象手机工厂,然后每个工厂来制造结构相同的手机,但是手机的各个部件却完全不同。
实现
-
抽象工厂:提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
-
具体工厂:主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
-
抽象产品:定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
- 具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。
// 抽象工厂
public interface AbstractFactory {
Product1 newProduct1();
Product2 newProduct2();
}
// 具体工厂
public class Factory implements AbstractFactory{
@Override
public Product1 newProduct1() {
return new Product1();
}
@Override
public Product2 newProduct2() {
return new Product2();
}
}
// 抽象产品
public interface AbstractProduct {
void method();
}
// 具体产品
public class Product1 implements AbstractProduct{
@Override
public void method() {
System.out.println("产品1出厂");
}
}
public class Product2 implements AbstractProduct {
@Override
public void method() {
System.out.println("产品2出厂");
}
}
// 测试
public class Test {
public static void main(String[] args) {
AbstractFactory factory = new Factory();
Product1 product1 = factory.newProduct1();
Product2 product2 = factory.newProduct2();
product1.method();
product2.method();
}
}
总结
-
分离了接口与实现,使用抽象工厂来创建需要的对象,而无需知道具体的实现是谁,只是面向产品的接口编程而已,使其从具体的产品中实现解耦
- 类文件过多,不太容易拓展产品类。