工厂模式

简单工厂

UML

简单工厂.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

工厂方法.png

优缺点

  • 优点:克服了简单工厂的问题。新增解析器(产品),不需要修改原有的类。
  • 缺点:
    • 新增解析器(产品)的同时也需要新增,对应的工厂类。产品-工厂成对儿新增,成对儿修改,每次工作量比较大。
    • 无法新增系列产品。

抽象工厂

UML

抽象工厂.png

优缺点

  • 优点:克服无法新增系列产品缺点。
  • 缺点:新增解析器(产品)的同时也需要新增,对应的工厂类。产品-工厂成对儿新增,成对儿修改,每次工作量比较大。

总结

抽象工厂工作中并不常用,因为其实并不会解决工厂方法的缺点。

源码

java版本
go版本

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容