创建型模式

笔记/Java/设计模式/创建型模式

总览见 设计模式概述 · 面试速查见 设计模式面试题 14 道

创建型模式关注对象的创建过程:如何隐藏 new、如何解耦创建与使用、如何保证实例唯一或高效复制。

GoF 共 5 种:单例、工厂方法、抽象工厂、建造者、原型

创建型模式对比:单例、工厂、建造者
创建型模式对比:单例、工厂、建造者

单例模式#

保证全局唯一实例 + 统一访问点。

常用写法

// 静态内部类(推荐:懒加载 + 线程安全)
public class Singleton {
private Singleton() {}
private static class Holder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}
// 枚举(防反射/反序列化,无懒加载)
public enum SingletonEnum {
INSTANCE;
}

选型:不需懒加载 → 枚举或饿汉式;需懒加载 → 静态内部类优于懒汉式。

注意:反射可破坏普通单例;DCL 需 volatile;连接池等不宜无脑单例。

Spring:默认 singleton Bean 为单例管理(容器级,非 GoF 严格单例)。

工厂模式#

类型扩展性典型场景
简单工厂改工厂 if-else少量产品
工厂方法新增产品 = 新增工厂产品族扩展
抽象工厂新增产品族多系列产品配套

Spring IOC:容器根据 BeanDefinition 反射创建对象,注册到单例 Map,本质是工厂 + 单例,解决业务类之间 new 导致的强耦合。

建造者模式#

复杂对象分步构建:Builder 定义步骤 → ConcreteBuilder 实现 → Director 编排 → Product 结果。

与工厂区别:建造者关心装配顺序与步骤,工厂关心创建哪种具体类型

StringBuilder.append() 是典型建造者用法。

原型模式#

通过 clone() 复制对象,避免重复执行昂贵构造/初始化。

拷贝说明
浅拷贝基本类型复制,引用类型共享
深拷贝引用类型递归 clone 或序列化

Springprototype 作用域每次从容器取新实例,思想接近原型。

创建型模式一览#

模式一句话
单例全局唯一实例
工厂方法子类决定创建哪种产品
抽象工厂创建一族配套产品
建造者分步组装复杂对象
原型克隆已有实例
文章目录

文章目录