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

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

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();
}

适用性

它适用于

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


结束

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

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

相关文章
|
10天前
|
设计模式 C# C++
工厂方法模式
工厂方法模式是一种创建型设计模式,定义一个创建对象的接口,但让子类决定具体实例化哪个类。该模式具有高内聚、低耦合的特点,支持动态扩展新产品类型,适用于复杂或经常变化的产品族。其主要组成部分包括抽象产品、具体产品、抽象工厂和具体工厂。工厂方法模式遵循开闭原则,新增产品无需修改现有代码,但会增加系统复杂性。
20 5
|
设计模式 C++
2023-6-10-第一式工厂方法模式
2023-6-10-第一式工厂方法模式
88 0
|
设计模式 监控 uml
剖析工厂方法模式、从开电脑店开始
工厂类负责把实例化类时,复杂的过程透明化,同时避免大量实例化类的重复代码的出现。
剖析工厂方法模式、从开电脑店开始
|
设计模式 算法 搜索推荐
工厂方法模式的两个极端
概念:是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。
|
设计模式
抽象工厂
抽象工厂
57 0
|
设计模式
工厂方法模式详细介绍
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种将对象的创建逻辑封装在工厂类中的方式,使得客户端代码无需直接依赖具体的类来创建对象。
111 0
|
设计模式
我学会了,工厂方法模式
工厂方法模式属于创建型模式,这个类型的设计模式是将 对象的创建和使用解耦了,花式的去创建对象。
89 0
我学会了,工厂方法模式
|
关系型数据库
工厂模式(简单工厂、工厂方法、抽象工厂)(2)
工厂模式(简单工厂、工厂方法、抽象工厂)2
142 0
工厂模式(简单工厂、工厂方法、抽象工厂)(2)
|
设计模式 Java
工厂模式(简单工厂、工厂方法、抽象工厂)(1)
工厂模式(简单工厂、工厂方法、抽象工厂)(1)
157 0
工厂模式(简单工厂、工厂方法、抽象工厂)(1)