简单工厂
UML
![](https://img.haomeiwen.com/i11063379/418b9fe52af0a190.png)
优缺点
-
优点:简单
-
缺点:违反开闭原则,一旦需要增加一个解析器(产品),则需要修改原有代码。
public class SimpleFactory { public static IParser NewParser(String type) { return switch (type) { case "json" -> new JsonParser(); case "xml" -> new XmlParser(); case "yaml" -> new YamlParser(); // 新增 toml 解析器,则需要修改原有代码。 case "toml" -> new TomlParser(); default -> throw new RuntimeException("参数错误"); }; } }
工厂方法
UML
![](https://img.haomeiwen.com/i11063379/754835fecdad4646.png)
优缺点
- 优点:克服了简单工厂的问题。新增解析器(产品),不需要修改原有的类。
- 缺点:
- 新增解析器(产品)的同时也需要新增,对应的工厂类。产品-工厂成对儿新增,成对儿修改,每次工作量比较大。
- 无法新增系列产品。
抽象工厂
UML
![](https://img.haomeiwen.com/i11063379/f803435c06c5419f.png)
优缺点
- 优点:克服无法新增系列产品缺点。
- 缺点:新增解析器(产品)的同时也需要新增,对应的工厂类。产品-工厂成对儿新增,成对儿修改,每次工作量比较大。
总结
抽象工厂工作中并不常用,因为其实并不会解决工厂方法的缺点。
网友评论