工厂方法模式是怎么变抽象工厂的

简介: 工厂方法模式是怎么变抽象工厂的

Abstract Factory(抽象工厂)

特点

抽象工厂提供了一个创建一系列相关或相互依赖的接口,且无须指定它们具体的类。

大概结构

按照理解,自己在processOn里画了一个大概的结构,大家凑合的看。

其中

  • AbstractFactory 声明一个抽象对象的操作接口
  • ConcreteFactory 实现具体对象的操作
  • AbstractProduct 为一类对象声明接口
  • ConcreteProduct 定义一个相对应的产品对象,内部实现AbstractProduct
  • Client 仅使用由AbstractFactory 和 AbstractProduct 类声明的接口

与工厂方法相比,其实就在产品的抽象上多抽一个产品B,工厂接口中多定义个方法。

代码

按照结构图,创建Factory接口类,声明两个产品的接口方法。

interface Factory {
    ProductA createProductA();
    ProductB createProductB();
}

实现类Factory上,创建FactoryA和FactoryB来实现createProduct方法,返回对应的类。

class FactoryA implements Factory{
    @Override
    public ProductA createProductA(){
        return new ProductA1();
    }
    @Override
    public ProductB createProductB(){
        return new ProductB1();
    }
}
class FactoryB implements Factory{
    @Override
    public ProductA createProductA(){
        return new ProductA2();
    }
    @Override
    public ProductB createProductB(){
        return new ProductB2();
    }
}

声明两种产品的接口类ProductA 和ProductB

interface ProductA {
   void method();
}
interface ProductB {
    void method();
}

以及对应的实现类

class ProductA1 implements ProductA{
    @Override
    public void method()
    {
        System.out.println("产品A1");
    }
}
class ProductA2 implements ProductA{
    @Override
    public void method()
    {
        System.out.println("产品A2");
    }
}
class ProductB1 implements ProductB{
    @Override
    public void method()
    {
        System.out.println("产品B1");
    }
}
class ProductB2 implements ProductB{
    @Override
    public void method()
    {
        System.out.println("产品B2");
    }
}

Client作为Main函数进行创建工厂对象并创建类

public static void main(String[] args)
{
    Factory factoryA = new FactoryA();
    ProductA productA = factoryA.createProductA();
    //打印 产品A1
    productA.method();
    Factory factoryB = new FactoryB();
    ProductB productB = factoryB.createProductB();
    //打印 产品B2
    productB.method();
}

适用性

它适用于

  • 独立于产品的创建,表示和组合时。
  • 由多个产品中的一个来配置时。
  • 提供一个产品库,仅显示接口而不是实现时。


结束

抽象工厂的每个方法看起来都像是工厂方法,且每个方法都被声明成抽象,由子类的方法进行覆盖和实现。

希望本文能对大家有所帮助,和了不起一起持续学习。

相关文章
|
6月前
|
Java API 数据库
工厂方法模式
工厂方法模式
38 0
|
设计模式 C++
2023-6-10-第一式工厂方法模式
2023-6-10-第一式工厂方法模式
82 0
|
设计模式 监控 uml
剖析工厂方法模式、从开电脑店开始
工厂类负责把实例化类时,复杂的过程透明化,同时避免大量实例化类的重复代码的出现。
剖析工厂方法模式、从开电脑店开始
|
设计模式 算法 搜索推荐
工厂方法模式的两个极端
概念:是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。
|
设计模式
抽象工厂
抽象工厂
52 0
|
设计模式
工厂方法模式详细介绍
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种将对象的创建逻辑封装在工厂类中的方式,使得客户端代码无需直接依赖具体的类来创建对象。
103 0
|
设计模式 C++
简单工厂VS工厂方法VS抽象工厂
简单工厂VS工厂方法VS抽象工厂
107 0
简单工厂VS工厂方法VS抽象工厂
|
设计模式
我学会了,工厂方法模式
工厂方法模式属于创建型模式,这个类型的设计模式是将 对象的创建和使用解耦了,花式的去创建对象。
86 0
我学会了,工厂方法模式
|
关系型数据库
工厂模式(简单工厂、工厂方法、抽象工厂)(2)
工厂模式(简单工厂、工厂方法、抽象工厂)2
135 0
工厂模式(简单工厂、工厂方法、抽象工厂)(2)