抽象工厂模式的出现是为了解决多种复杂的工厂的实现,一般来说有多种产品时通过工厂方法模式即可解耦,但是如果工厂也有多种实现,每种工厂的实现都很复杂,需要通过抽象工厂来解耦
抽象产品类
public interface AbstractProduct {
/**
* 返回产品名字
*/
String getName();
}
抽象工厂类
/**
* 抽象工厂类
*/
public interface AbstractProductFactory {
/**
* 生产实例
*/
AbstractProduct create();
/**
* 动态返回工厂
*/
static AbstractProductFactory getFactory(String type) {
if (type.equalsIgnoreCase("low")) {
return new LowQualityProductFactory();
}
return new GoodProductFactory();
}
}
使用
public class Test {
public static void main(String[] args) {
// 工厂是抽象的,有多种工厂的实现
AbstractProductFactory factory = AbstractProductFactory.getFactory("low");
// 产品是抽象的,有多种产品的实现,具体产品和具体工厂是对应的
AbstractProduct product = factory.create();
// 产品的使用是动态的
System.out.println(product.getName());
factory = AbstractProductFactory.getFactory("good");
product = factory.create();
System.out.println(product.getName());
}
}
产品实现类
/**
* 高质量产品
* @author zhouwenjun
* @version 2022/3/28
*/
public class GoodProduct implements AbstractProduct {
@Override
public String getName() {
return "高质量产品";
}
}
/**
* 低质量产品
* @author zhouwenjun
* @version 2022/3/28
*/
public class LowQualityProduct implements AbstractProduct {
@Override
public String getName() {
return "低质量的产品";
}
}
工厂实现类
/**
* 高质量产品的工厂
* @author zhouwenjun
* @version 2022/3/28
*/
public class GoodProductFactory implements AbstractProductFactory {
@Override
public AbstractProduct create() {
return new GoodProduct();
}
}
/**
* 低质量的产品的工厂
* @author zhouwenjun
* @version 2022/3/28
*/
public class LowQualityProductFactory implements AbstractProductFactory {
@Override
public AbstractProduct create() {
return new LowQualityProduct();
}
}
代码结构: