设计模式(二):简单工厂模式

Published on 2024-02-29 13:35 in 分类: 博客 with 狂盗一枝梅
分类: 博客

一、简单工厂模式定义

简介:简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为,在简单工厂模式中,可以根据参数的不同返回不同类的实例在软件开发中,当我们涉及到大量的创建某种或者某类对象时,就会使用到工厂模式,你只需要使用工厂对象来需创建对象即可,具体的创建细节被工厂对象封装起来

需要说明的是,对于简单工厂模式,有时它被认为不是23种经典设计模式中的一种,原因如下:

  1. 黑板上的设计模式:最初提出的23种设计模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(Gang of Four,简称GoF)在《设计模式:可复用面向对象软件的基础》一书中总结和命名的。简单工厂模式并没有在该书中被明确提及,因此在GoF的传统定义中,它不被视为23种设计模式之一。
  2. 缺乏一致性:简单工厂模式与其他经典设计模式的主要区别在于其简单性和特定的用途。相较于其他模式,简单工厂模式的实现较为直接和简单,它通常不涉及到对象之间的复杂交互和关系。因此,有些人认为简单工厂模式不具备其他模式的那种深度和复杂性,所以将其排除在23种经典设计模式之外。

尽管如此,简单工厂模式仍然是一个常见且有用的设计模式,被广泛应用于许多软件开发项目中。它提供了一种简单而灵活的方式来创建对象,使得客户端代码可以更加聚焦于业务逻辑,而无需关注对象的具体创建过程。虽然它可能不是23种经典设计模式之一,但在实际开发中仍然具有一定的价值和应用场景。

二、案例

以文件解析为例

当涉及到处理不同类型的文件格式时,文件解析器工厂可以通过简单工厂模式来创建相应的解析器对象。这样的工厂可以根据文件类型的不同,实例化不同的解析器对象,使客户端代码能够以统一的方式使用这些解析器。

简单工厂模式.drawio

首先,我们需要定义一个抽象的文件解析器接口(FileParser),它定义了解析文件的方法:

public interface FileParser {
    void parse(String filePath);
}

然后,我们可以实现具体的文件解析器类,例如XML文件解析器(XmlFileParser)、CSV文件解析器(CsvFileParser)和JSON文件解析器(JsonFileParser):

public class XmlFileParser implements FileParser {
    @Override
    public void parse(String filePath) {
        System.out.println("解析XML文件: " + filePath);
        // 具体的解析逻辑
    }
}

public class CsvFileParser implements FileParser {
    @Override
    public void parse(String filePath) {
        System.out.println("解析CSV文件: " + filePath);
        // 具体的解析逻辑
    }
}

public class JsonFileParser implements FileParser {
    @Override
    public void parse(String filePath) {
        System.out.println("解析JSON文件: " + filePath);
        // 具体的解析逻辑
    }
}

接下来,我们创建文件解析器工厂类(FileParserFactory),它根据文件类型来选择实例化对应的解析器对象:

public class FileParserFactory {
    public FileParser createFileParser(String fileType) {
        if (fileType.equalsIgnoreCase("xml")) {
            return new XmlFileParser();
        } else if (fileType.equalsIgnoreCase("csv")) {
            return new CsvFileParser();
        } else if (fileType.equalsIgnoreCase("json")) {
            return new JsonFileParser();
        }
        return null;
    }
}

最后,我们可以通过文件解析器工厂来创建不同类型的文件解析器对象,并进行文件解析:

public class Main {
    public static void main(String[] args) {
        FileParserFactory factory = new FileParserFactory();

        FileParser xmlParser = factory.createFileParser("xml");
        xmlParser.parse("data.xml"); // 解析XML文件: data.xml

        FileParser csvParser = factory.createFileParser("csv");
        csvParser.parse("data.csv"); // 解析CSV文件: data.csv

        FileParser jsonParser = factory.createFileParser("json");
        jsonParser.parse("data.json"); // 解析JSON文件: data.json
    }
}

通过文件解析器工厂,客户端代码可以通过统一的工厂接口来获取所需的文件解析器对象,而无需关心具体解析器的创建过程。这样可以提供更好的代码组织和解耦,同时也支持系统的扩展性和可维护性,因为可以通过扩展工厂类来添加新的文件解析器类型,而无需修改客户端代码。

三、总结

简单工厂模式有以下特点:

1、在简单工厂模式中,工厂类负责封装实例化对象的细节,而不是在使用的地方直接new

2、工厂类提供统一的创建接口,屏蔽了外部调用者创建对象的细节

最后,简单工厂模式确实太简单了,由于过于简单才被踢出了23种设计模式。。



END.


#设计模式
目录