简单工厂模式-Simple Factory Pattern

原文地址:https://jaune162.blog/design-pattern/simple-factory-pattern/

简介

简单工厂模式是一种非常常用的设计模式,但是并不属于GoF中的23种设计模式。简单设计模式有很多种实现方式。

本文我们就来讨论简单工厂模式的实现方式,以及如何借助Spring实现一个扩展性很好的简单工厂模式。

定义及实现

定义

  • creates objects without exposing the instantiation logic to the client.
  • refers to the newly created object through a common interface
  • 创建对象但是不想客户端暴露对象实例化的逻辑
  • 通过通用接口引用新创建的对象

结构

  • Product:商品接口。
  • ConcreteProductA和ConcreteProductB:分别为商品的两个实现。
  • Factory:工厂,创建商品实例,并将商品实例返回给客户端供客户端调用。
  • Client:客户端,商品的使用者。

实现

public interface Product {
   
   
    void doSomething();
}

public class ConcreteProductA implements Product {
   
   
    @Override
    public void doSomething() {
   
   
        System.out.println("This is product A");
    }
}

public class ConcreteProductB implements Product {
   
   

    @Override
    public void doSomething() {
   
   
        System.out.println("This is product B");
    }
}

public class Factory {
   
   

    public Product createProduct(String type) {
   
   
        if (type.equalsIgnoreCase("A")) {
   
   
            return new ConcreteProductA();
        } else if (type.equalsIgnoreCase("B")) {
   
   
            return new ConcreteProductB();
        }
        throw new RuntimeException("不支持的类型");
    }
}

public class Client {
   
   

    public static void main(String[] args) {
   
   
        Factory factory = new Factory();
        Product product = factory.createProduct("A");
        product.doSomething();
    }
}

其实简单工厂模式的核心就是下面的代码

if (type.equalsIgnoreCase("A")) {
   
   
    return new ConcreteProductA();
} else if (type.equalsIgnoreCase("A")) {
   
   
    return new ConcreteProductB();
}

通过判断传入的参数,然后根据参数创建不同的对象。

这种方式的弊端就是我们没增加一种Product的实现,都需要修改工厂类。下面我们将一种不用修改工厂类的方法。

将产品注册到工厂

ProductConcreteProductAConcreteProductB不变。

public class Factory {
   
   

    public Map<String, Class<? extends 

相关推荐

  1. 简单工厂模式

    2024-02-18 16:10:01       40 阅读
  2. 设计模式-简单工厂

    2024-02-18 16:10:01       33 阅读
  3. 简单工厂模式

    2024-02-18 16:10:01       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-18 16:10:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-18 16:10:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-18 16:10:01       82 阅读
  4. Python语言-面向对象

    2024-02-18 16:10:01       91 阅读

热门阅读

  1. 367.有效的完全平方数

    2024-02-18 16:10:01       47 阅读
  2. Vue3快速入门

    2024-02-18 16:10:01       48 阅读
  3. GRUB and the Boot Process on UEFI-based x86 Systems

    2024-02-18 16:10:01       49 阅读