你还不懂设计模式? - 抽象工厂模式

抽象工厂模式(Abstract Factory Pattern),顾名思义,是对工厂的抽象。是工厂方法模式的进一步抽象。也可以说是对工厂方法模式的包装。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

先来看一下UML图:

  • 第一种实现:
    在这里插入图片描述
    要创建的最终的Bean的UML图:
    在这里插入图片描述
  • 第二种实现
    在这里插入图片描述
    类图:
    在这里插入图片描述
    可以看到,就是使用FactoryCreator来创建不同类型的工厂类。创建了工厂类了之后的逻辑与工厂方法中的一致。有疑问可以去看上一篇工厂方法模式

方式1适合创建类的种类很多的情况。
方式2则是有点类似工厂方法。这是对工厂方法进行了一层包装。

方式2在日志模块有很好的应用:
如下是org.slf4j.LoggerFactory#getLogger(String name)方法。

    public static Logger getLogger(String name) {
        //获取不同类型日志实现的工厂实例
        //系统使用logback时,实现的工厂类是LoggerContext
        ILoggerFactory iLoggerFactory = getILoggerFactory();
        //再从工厂实例中获取具体的日志的实例
        return iLoggerFactory.getLogger(name);
    }

这个例子中:

  1. org.slf4j.LoggerFactory对应图中FactoryCreator
  2. ILoggerFactory对应IFactory
  3. LoggerContext对应BeanXFactroy

设计模式的精髓在于真对变化的变化,千万不能生搬硬套。照葫芦画瓢。如上在slf4j日志的这个场景的实现中就对这个进行了优化。可以动态获取class包中的日志实现工厂类。但是再其他的一些场景getILoggerFactory()方法中又可以加参数,指定获取哪一种Bean的工厂类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值