工厂模式

工厂模式

viEcho Lv5

具体代码见LocalDemo之shejimoshi模块

举个例子,比如我们要做文件解析,那么我们可能用xml,json,text,html等;那么我就建四个对应的工厂,封装对应的解析方法就好;调用时只用根据文件类型获取对应的工厂,调用对应的解析方法即可;对于外部而言,就是一个工厂做了一个解析动作;封装内部的变化及实现

如上例子的实现

1
2
3
4
5
6
7
8
9
10
11
12
src/
├── main/
│ ├── java/
│ │ └── local/demo/test/shejimoshi/factory/
│ │ ├── Parser.java # 解析器接口
│ │ ├── XmlParser.java # XML解析器
│ │ ├── JsonParser.java # JSON解析器
│ │ ├── TextParser.java # 文本解析器
│ │ ├── HtmlParser.java # HTML解析器
│ │ ├── ParserFactory.java # 工厂接口
│ │ ├── ClientMain.java # 客户端调用示例
│ │ └── ParserFactoryCreator.java # 工厂创建器

1.定义解析类接口

1
2
3
public interface Parser {
String parse(String content); // 解析方法
}

2.实现解析类接口

1
2
3
4
5
6
7
8
9
// XML 解析器
public class XmlParser implements Parser {
@Override
public String parse(String content) {
// 模拟 XML 解析逻辑
return "XML Parsed: " + content;
}
}
// 其他类型省略

3.定义工厂接口 ParserFactory.java

1
2
3
public interface ParserFactory {
Parser createParser(); // 创建解析器的方法
}

4.实现具体的工厂类

1
2
3
4
5
6
public class XmlParserFactory implements ParserFactory {
@Override
public Parser createParser() {
return new XmlParser();
}
}

5.创建工厂生成器ParserFactoryCreator

1
2
3
4
5
6
7
8
9
10
11
public class ParserFactoryCreator {
public static ParserFactory getFactory(String fileType) {
switch (fileType.toLowerCase()) {
case "xml":
return new XmlParserFactory();
//其他略...
default:
throw new IllegalArgumentException("Unsupported file type: " + fileType);
}
}
}

6.调用示例

1
2
3
4
5
6
7
8
9
10
11
12
public class ClientMain {
public static void main(String[] args) {
// 根据文件类型获取工厂
ParserFactory factory = ParserFactoryCreator.getFactory("xml");

// 创建解析器并解析内容
Parser parser = factory.createParser();
String result = parser.parse("<root>data</root>");

System.out.println(result); // 输出: XML Parsed: <root>data</root>
}
}

总结:工厂模式解决对象如何创建的问题,核心是生产对象;作用是创建对象,将对象的创建与使用分离

  • Title: 工厂模式
  • Author: viEcho
  • Created at : 2024-01-10 00:00:00
  • Updated at : 2025-02-21 18:23:00
  • Link: https://viecho.github.io/2024/0110/factory-mode.html
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments