简单工厂模式在框架源码(JDK和Logback)中的应用

本文探讨了简单工厂模式在JDK和Logback源码中的实现,通过Calendar类的getInstance()方法展示了JDK中的应用,并详细解释了createCalendar()方法的工作原理。同时,分析了Logback的LoggerFactory,指出getLogger()方法如何体现简单工厂模式。
摘要由CSDN通过智能技术生成

本节分别介绍简单工厂模式在 JDK 及 Logback 源码中的应用。

1. 简单工厂模式在JDK源码中的应用

可以说简单工厂模式在 JDK 源码中无处不在,下面以 Calendar 类为例讲解简单工厂模式在 JDK 源码中的应用。Calendar 类的 getInstance() 方法源码如下。

  1. public static Calendar getInstance() {
  2. Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT));
  3. cal.sharedZone = true;
  4. return cal;
  5. }

进入 createCalendar() 方法中,源码如下:

  1. private static Calendar createCalendar(TimeZone zone, Locale aLocale) {

  2. Calendar cal = null;

  3. String caltype = aLocale.getUnicodeLocaleType(“ca”);

  4. if (caltype == null) {

  5. // Calendar type is not specified.

  6. // If the specified locale is a Thai locale,

  7. // returns a BuddhistCalendar instance.

  8. if (“th”.equals(aLocale.getLanguage())

  9. && (“TH”.equals(aLocale.getCountry()))) {

  10. cal = new BuddhistCalendar(zone, aLocale);

  11. } else {

  12. cal = new GregorianCalendar(zone, aLocale);

  13. }

  14. } else if (caltype.equals(“japanese”)) {

  15. cal = new JapaneseImperialCalendar(zone, aLocale);

  16. } else if (caltype.equals(“buddhist”)) {

  17. cal = new BuddhistCalendar(zone, aLocale);

  18. } else {

  19. // Unsupported calendar type.

  20. // Use Gregorian calendar as a fallback.

  21. cal = new GregorianCalendar(zone, aLocale);

  22. }

  23. return cal;

  24. }

Calendar 的 UML 类图如下:

image

2. 简单工厂模式在Logback源码中的应用

在大家经常使用的 Logback 中,也可以看到 LoggerFactory 中有多个重载的方法 getLogger()。

  1. public static Logger getLogger(String name){
  2. ILoggerFactory iLoggerFactory = getILoggerFactory();
  3. return iLoggerFactory.getLogger(name);
  4. }
  5. public static Logger getLogger(Class clazz){
  6. return getLogger(clazz.getName());
  7. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值