0
点赞
收藏
分享

微信扫一扫

设计模式 - 工厂方法模式

陆佃 2022-01-31 阅读 42

定义

工厂方法模式(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();
    }
}
举报

相关推荐

0 条评论