Java设计模式 (二) 工厂模式

什么是工厂模式?
工厂模式是一种创建型设计模式,它提供了一种统一的方式来创建对象,隐藏了对象的创建细节,使客户端代码与具体类的实例化过程解耦。工厂模式可以帮助您在不暴露对象创建细节的情况下实例化对象,从而提高代码的灵活性和可维护性。

工厂模式通常涉及以下几个角色:

  • 产品(Product): 这是一个抽象类或接口,它定义了工厂方法所创建的对象的共同接口。具体的产品类将实现这个接口。
  • 具体产品(Concrete Product): 这些是实现了产品接口的具体类,它们是工厂方法所创建的对象的实际实例。
  • 工厂(Factory):这是一个抽象类或接口,它声明了一个工厂方法,该方法返回一个产品对象。具体的工厂类将实现这个工厂方法来创建具体产品的实例。
  • 具体工厂(Concrete Factory): 这些是实现了工厂接口的具体类,它们负责实际创建具体产品的实例。

工厂模式的主要优点包括:

  • 隐藏了对象的创建细节,客户端代码不需要知道具体的实例化过程。
  • 提高了代码的灵活性和可维护性,因为客户端代码与具体类解耦。
  • 可以根据需要使用不同的工厂来创建不同的产品实例,从而实现了多态性。

工厂模式的一些常见实现包括:

  • 简单工厂模式:由一个工厂类根据不同的条件创建不同的产品实例。
  • 工厂方法模式:每个具体产品对应一个具体工厂,每个具体工厂只负责创建一个具体产品。
  • 抽象工厂模式:多个抽象产品对应多个抽象工厂,每个具体工厂负责创建一组具体产品。

工厂模式在实际应用中广泛使用,它帮助解决了对象的创建问题,使代码更具扩展性和可维护性。

简单工厂模式代码案例

bash 复制代码
import java.util.HashMap;
import java.util.Map;

/**
 * @author Wang
 */
public class SynFileFactory {

    private final static Map<String, AbstractSynFileHandler<?>> DATA_MESSAGE_FORWARD_MAPPING = new HashMap<>();

    private SynFileFactory() {

    }


    public static void registerHandler(String fileName, AbstractSynFileHandler<?> handler) {
        DATA_MESSAGE_FORWARD_MAPPING.put(fileName, handler);
    }

    public static AbstractSynFileHandler<?> getHandler(String fileName) {
        return DATA_MESSAGE_FORWARD_MAPPING.get(fileName);
    }

}

在这个代码中,SynFileFactory 就充当了一个工厂类的角色。工厂类的主要目的是创建和管理对象的实例,以及提供一种统一的方式来获取对象。

在这个工厂类中:

  • DATA_MESSAGE_FORWARD_MAPPING 是一个存储不同文件处理器的映射关系的集合。
  • registerHandler 方法用于将文件名和对应的文件处理器注册到映射集合中。
  • getHandler 方法用于根据文件名从映射集合中获取对应的文件处理器。

通过这个工厂类,您可以动态地注册不同的文件处理器,并在需要时获取正确的处理器实例,而无需了解具体的实现细节。这种方式可以使客户端代码与具体的文件处理器类解耦,使得代码更加灵活、可维护和可扩展。
总之,这段代码实现了工厂模式,它提供了一个集中管理和创建不同类型对象的方式,帮助减少了代码的耦合性并提高了可维护性。

相关推荐
Rain的Java大神之路1 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
counting money1 小时前
Tomcat 专题:从基础架构到性能调优与 WebSocket 实战
java·websocket·tomcat
xiaohaiAIgeo2 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
小强库计算机毕业设计2 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
霸道流氓气质2 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
怪奇云呼军2 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
编程令我快乐3 小时前
maven部分构建参数讲解
java·maven
ZC跨境爬虫3 小时前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
workflower3 小时前
例二:某汽车制造企业深度融合AI智能体,构建园区网络的智能运维体系
人工智能·机器学习·设计模式·机器人·云计算·汽车·制造
kisbad3 小时前
Day 036|OpenAI Agents SDK 快速开始:今天跑通第一个 Agent
java·前端·javascript