Java包装类如何实现工厂模式?以Integer的valueOf方法为例
包装类的valueOf方法如何实现工厂模式?
首先得明确,工厂模式的核心就是封装对象的创建逻辑,让调用者不用关心对象是怎么来的,只需要拿到符合需求的对象。Integer的valueOf就是这种模式的典型实现——静态工厂方法。
先看你贴的代码:
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
这个方法的作用就是根据传入的int值,返回对应的Integer对象,但它把创建逻辑完全封装起来了:
- 当int值在
IntegerCache.low(默认-128)到IntegerCache.high(默认127)这个区间时,直接返回缓存里已经创建好的Integer对象,避免重复创建相同值的对象 - 如果超出这个区间,才会新建一个Integer对象返回
你可能疑惑它没有传统工厂模式里的“工厂类”,但静态工厂方法本身就是工厂模式的一种简化形式——它不需要额外的工厂类,直接用静态方法承担了工厂的职责:负责创建、复用对象,给调用者提供统一的获取对象的入口。
再看Boolean的valueOf会更直观:
public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); }
它直接复用TRUE和FALSE两个静态实例,完全不创建新对象,把对象的创建和复用逻辑彻底封装,调用者只需要传一个boolean值就能拿到对应的Boolean对象,这就是工厂模式的核心价值——屏蔽创建细节,统一对象获取方式。
内容的提问来源于stack exchange,提问作者coder25
相关产品推荐
相关产品推荐

