🎯 为什么需要这些模式?
🛠️ 痛点:直接new对象会导致代码僵硬、难维护
✨ 解决:用设计模式让代码更灵活、易扩展、好维护!
1️⃣ 单例模式 | 只生成一个对象
🔹 场景:配置文件、数据库连接池、日志对象
🔹 关键点:
- 私有构造方法 🔒
- 全局访问点 🌍
- 线程安全 ✅
public class Singleton {
private static Singleton instance;
private Singleton() {} // 禁止外部new
// 获取唯一实例(懒加载+线程安全)
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
💡 小技巧:用枚举实现更简单且防反射攻击!
2️⃣ 工厂方法 | 生产同类型对象
🔹 场景:支付方式、日志处理器、数据库连接
🔹 核心思想:
👉 定义接口 → 子类决定实例化谁
// 产品接口
interface Animal {
void sound();
}
// 具体产品
class Cat implements Animal {
@Override
public void sound() { System.out.println(" 喵~"); }
}
// 工厂接口
interface AnimalFactory {
Animal createAnimal();
}
// 使用
AnimalFactory factory = new CatFactory();
Animal cat = factory.createAnimal();
cat.sound(); // 输出"喵~"
🚀 优点:新增动物类型时,只需加代码不改旧逻辑!
3️⃣ 抽象工厂 | 生产产品家族
🔹 场景:跨平台UI组件(按钮+文本框)、电子设备套装
🔹 特点:
- 一个工厂生产多个相关产品
- 适合品牌概念(如小米/苹果生态)
// 抽象工厂
interface TechFactory {
Phone createPhone();
Charger createCharger();
}
// 小米工厂
class XiaomiFactory implements TechFactory {
@Override
public Phone createPhone() { return new XiaomiPhone(); }
@Override
public Charger createCharger() { return new XiaomiCharger(); }
}
⚠️ 注意:新增产品类型(如耳机)需修改所有工厂
4️⃣ 建造者模式 | 分步组装复杂对象
🔹 场景:定制电脑、订单生成、游戏角色创建
🔹 优势:
- 避免构造器参数爆炸 💥
- 清晰区分必选/可选参数
Computer pc = new Computer.Builder()
.cpu("i7") // ✔️ 链式调用
.ram("16GB")
.ssd("512GB")
.build(); // 一键生成!
🎯 经典应用:StringBuilder、AlertDialog(Android)
5️⃣ 原型模式 | 高效复制对象
🔹 场景:游戏道具克隆、性能敏感的对象创建
🔹 实现方式:
- 浅拷贝:复制基础字段,引用共享 🚨
- 深拷贝:完全独立副本(需递归复制)
// 实现Cloneable接口
class Student implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone(); // 默认浅拷贝
}
}
// 使用
Student stu2 = (Student)stu1.clone();
📊 快速选型表
| 模式 | 特点 | 适用场景 |
|---|---|---|
| 单例 | 全局唯一 | 配置管理 |
| 工厂方法 | 子类决定实例 | 多类型产品 |
| 抽象工厂 | 生产产品家族 | 跨品牌配件 |
| 建造者 | 分步构建复杂对象 | 定制化需求 |
| 原型 | 克隆对象 | 高性能拷贝 |
🎁 文末福利:
📚 延伸阅读:《Head First设计模式》

1303

被折叠的 条评论
为什么被折叠?



