首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >六&七、工厂模式

六&七、工厂模式

作者头像
Yuyy
发布2022-09-21 09:59:32
发布2022-09-21 09:59:32
1980
举报

工厂模式

作用

唯一的职责就是创建对象,将复制的创建过程,获取对象的逻辑与对象的使用进行解耦。

分为简单工厂、工厂方法、抽象工厂。

简单工厂

对象获取逻辑复杂时,例如根据文件类型获取对应的解析器,解析器有很多,就需要在使用对象前,进行臃肿的逻辑判断,才能获取对应的解析器对象。造成获取对象与使用对象耦合,不好扩展。后续新增解析器,又得在获取对象那里添砖加瓦了,不符合开闭原则。

将复杂的、需要扩展的对象创建和对象获取抽取出来,就是简单工厂了。

ParserFactory 简单工厂类

代码语言:javascript
复制
public class ParserFactory {
    // 如果是单例,可使用依赖注入优化
    private static Map<String, Supplier<Parser>> instances= Maps.newHashMap();

    static {
        instances.put(ParserConstant.JSON, JsonParser::new);
        instances.put(ParserConstant.XML,XmlParser::new);
        instances.put(ParserConstant.YMAL, YmalParser::new);
    }

    public static Parser newInstance(String format) {
        return instances.get(format)
                        .get();
    }
}

工厂方法

如果创建对象过程复杂,多个对象创建逻辑都放到简单工厂里,在类这个抽象层面来看,是不符合单一职责原则的。于是将各个对象创建过程封装到单独的工厂类里,然后创建工厂的工厂,用于封装获取工厂类的逻辑。这点类似于简单工厂类,只是获取的是工厂对象而非目标对象罢了。

抽象工厂

抽象工厂是对工厂方法里的工厂进行扩展,每个工厂能产生不同类型的对象(不常见)

扩展

在JDK中工厂方法的命名有些规范

  1. valueOf() 返回与入参相等的对象 例如 Integer.valueOf()
  2. getInstance() 返回单例对象 例如 Calendar.getInstance() 特殊情况:Calendar.getInstance()返回的不是单例
  3. newInstance() 每次调用时返回新的对象 例如 HelloWorld.class.getConstructor().newInstance()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-9-03 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工厂模式
    • 作用
    • 简单工厂
      • ParserFactory 简单工厂类
    • 工厂方法
    • 抽象工厂
    • 扩展
      • 在JDK中工厂方法的命名有些规范
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档