定义
工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的
优缺点
优点
- 符合开闭原则,新增加"产品"对象 只需要 新增工厂实现即可;无需修改原来的代码
- 解耦,抽象工厂 只依赖 高层的抽象"产品",
- 调用者 无需 了解产品细节,只要了解每个工厂 可以生产哪个 产品
缺点
- 增加了系统的复杂度
- 每个工厂只能生产一种 产品
适用场景
调用者 不关系 "产品"的创建细节,只关心想要哪种类型的“产品”
主要组成结构
抽象工厂:
 具体工厂:
 抽象产品:
 具体产品:
类图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zNhkcwch-1643449317301)(https://gitee.com/beauty-coding/resource/raw/master/img/patterndesign/%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F.jpeg)]
代码实现
public class FactoryMethodPattern {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Factory factoryB = new ConcreteFactoryB();
        final Product productA = factoryA.getProduct();
        final Product productB = factoryB.getProduct();
        productA.doMethod();
        productB.doMethod();
    }
}
interface Product{
    void doMethod();
}
class ConcreteProductA implements Product{
    @Override
    public void doMethod() {
        System.out.println("产品A");
    }
}
class ConcreteProductB implements Product{
    @Override
    public void doMethod() {
        System.out.println("产品B");
    }
}
interface Factory{
    Product getProduct();
}
class ConcreteFactoryA implements Factory{
    @Override
    public Product getProduct() {
        return new ConcreteProductA();
    }
}
class ConcreteFactoryB implements Factory{
    @Override
    public Product getProduct() {
        return new ConcreteProductB();
    }
}









