23种设计模式--简单工厂模式理解版

简单工厂模式

设计模式:准确来说它是一种规范,它是我们约定好的一种解决问题的方案模版,不是什么的具体类和方法

先举个例子

P:生产者(接口) S:工厂 P的实现类:ABCDEFG

P:母亲 S:学校 P的孩子:ABCDEFG

对一个接口P(母亲),一开始就两个实现类(孩子)A、B,然后用工场(学校)S来管理A、B

然后呢?S管理十分有好处了(方便管理),比如P多生了几个孩子D、E、F,P(母亲)然后用工厂(学校)S统一管理

哈哈哈、博主想的这个例子太好了

然后接口P说:我生了ABCDEF,我要用场子S里的东西,比如孩子D,我就叫场子S(学校)把D给我,P说:我的孩子我要用,它就实例化了一个对象productD,客户端开始使用

java 复制代码
Product productD = SimpleFactory.createProduct("D");
productD.use();  // 输出:使用产品D

简单工厂模式

简单工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需向客户端暴露创建逻辑。

孩子怎么发展,客户端不清楚,客户端直接叫母亲P来创建

基本概念

简单工厂模式通过一个工厂类,根据传入的参数不同,返回不同类的实例。这些被创建的类通常具有共同的父类或接口。

母亲P叫哪个孩子,哪个孩子从工厂S创建

代码演示

java 复制代码
// 1. 抽象产品
interface Product {
    void use();
}

// 2. 具体产品
class ConcreteProductA implements Product {
    @Override
    public void use() {
        System.out.println("使用产品A");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void use() {
        System.out.println("使用产品B");
    }
}

// 3. 抽象工厂
interface Factory {
    Product createProduct();
}

// 4. 具体工厂
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 5. 客户端使用
public class Client {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.use();  // 输出:使用产品A
        
        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.use();  // 输出:使用产品B
    }
}

优点

  1. 将对象的创建与使用分离,降低耦合度
  2. 客户端无需知道具体产品的类名,只需要知道参数 ABCDEF

缺点

  1. 工厂类集中了所有产品的创建 逻辑,职责过重,工厂管的太多太多

  2. 添加新产品需要修改工厂类,违反开闭原则

    放封闭原则的核心思想:对扩展开放,对修改封闭.

    • 对扩展开放:意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

    • 对修改封闭:意味着类一旦设计完成,就可以独立完成其工作,而不要对已有代码进行任何修改

      参考文章:设计模式六大原则(六)----开闭原则

和工厂模式的区别

  • 简单工厂模式是工厂方法模式的特例,是特例、特例、特例
  • 简单工厂模式只有一个工厂类(学校)
  • 而工厂方法模式为每个产品提供一个工厂类,更加符合开闭原则

最终总结(重要)

统一的接口,不同的实现类,客户端根据不同的状态标记(比如ABC),创建不同的对象,进行使用

可以根据最终总结建立记忆锚点,自我进行知识输出

工厂模式

之后补充

相关推荐
有你有我OK1 分钟前
java 验证ip是否可达
java·开发语言·tcp/ip
不知疲倦的仄仄4 分钟前
RabbitMQ多角度可靠性分析/基于Java代码深度解析
java·spring·rabbitmq·java-rabbitmq
刘瑞瑞rr1 小时前
python画三维立体图
开发语言·python
暴躁茹1 小时前
C++中,std::async 一个用于异步编程的工具
开发语言·c++
真实的菜2 小时前
适配器模式:接口转换的神奇魔法[特殊字符],让不兼容的类和谐共处!
java·适配器模式
骚戴2 小时前
SpringBoot源码解析(十五):spring-boot-autoconfigure.jar的模块化设计
java
YuTaoShao2 小时前
Java八股文——计算机网络「应用层篇」
java·网络·计算机网络
Mryan20053 小时前
Android 应用多语言与系统语言偏好设置指南
android·java·国际化·android-studio·多语言
iCxhust3 小时前
PC16550 UART接收中断处理完整示例代码
c语言·开发语言·stm32·单片机·嵌入式硬件
wt_cs3 小时前
C#财政票查验接口集成-医疗发票查验-非税收入票据查验接口
开发语言·科技·安全·金融·ocr