1. 设计模式入门:为什么每个Java开发者都需要掌握
刚入行那会儿,我总觉得设计模式是那些架构师才需要关心的高级玩意儿。直到有次接手一个祖传代码,看到满屏的if-else和new关键字时,才明白为什么前辈说"不懂设计模式写不出好代码"。设计模式本质上就是前人总结的最佳实践套路,就像做菜的固定搭配——宫保鸡丁就该那么炒,回锅肉就得那么做。
在Java生态里,设计模式的应用几乎无处不在。Spring框架用工厂模式创建Bean,MyBatis用代理模式实现Mapper接口,JDK自身的集合类也大量运用迭代器模式。掌握这些模式后,你会发现很多框架源码突然变得亲切起来,甚至能预判某些类的设计思路。更重要的是,当产品经理又双叒叕改需求时,用对设计模式的代码往往只需要调整局部结构,而不用推倒重来。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 创建型模式:对象出生的艺术
2.1 单例模式(Singleton)
面试被问烂的单例模式,实际项目里最常见的用途是配置管理和线程池管理。我见过最离谱的代码是每个请求都new一个线程池,最后OOM了还找不到原因。正确的饿汉式写法应该是:
java复制public class ThreadPoolSingleton {
private static final ExecutorService INSTANCE = Executors.newFixedThreadPool(10);
private ThreadPoolSingleton() {}
public static ExecutorService getInstance() {
return INSTANCE;
}
}
注意:枚举实现单例才是《Effective Java》推荐的方式,既能防止反射攻击,又保证序列化安全
2.2 工厂方法模式
Spring的BeanFactory就是活教材。去年我重构过一个电商优惠券系统,原始代码里满是switch(couponType),每新增一种券类型就要修改核心逻辑。用工厂模式改造后:
java复制public interface CouponProcessor {
void applyCoupon(Order order);
}
public class DiscountCouponProcessor implements CouponProcessor {
// 具体实现
}
public class CouponProcessorFactory {
private static Map<String, CouponProcessor> processors = new HashMap<>();
static {
processors.put("DISCOUNT", new DiscountCouponProcessor());
processors.put("FULL_REDUCTION", new FullRedu
