您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # 什么是单例模式与原型模式
## 目录
1. [设计模式概述](#设计模式概述)
2. [单例模式详解](#单例模式详解)
   - [定义与特点](#定义与特点)
   - [实现方式](#实现方式)
   - [应用场景](#应用场景)
   - [优缺点分析](#优缺点分析)
3. [原型模式详解](#原型模式详解)
   - [定义与特点](#定义与特点-1)
   - [实现方式](#实现方式-1)
   - [应用场景](#应用场景-1)
   - [优缺点分析](#优缺点分析-1)
4. [模式对比](#模式对比)
5. [实际应用案例](#实际应用案例)
6. [总结](#总结)
---
## 设计模式概述
设计模式是软件工程中解决常见问题的可复用方案,分为创建型、结构型和行为型三大类。本文重点探讨两种创建型模式:
- **单例模式**:确保类只有一个实例
- **原型模式**:通过克隆现有对象创建新对象
---
## 单例模式详解
### 定义与特点
**单例模式(Singleton Pattern)** 是一种保证类仅有一个实例,并提供全局访问点的设计模式。核心特点包括:
- 私有化构造函数
- 静态私有实例变量
- 静态公共访问方法
### 实现方式
#### 1. 饿汉式(线程安全)
```java
public class Singleton {
    private static final Singleton instance = new Singleton();
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        return instance;
    }
}
public class Singleton {
    private volatile static Singleton instance;
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
public class Singleton {
    private static class Holder {
        static final Singleton INSTANCE = new Singleton();
    }
    
    public static Singleton getInstance() {
        return Holder.INSTANCE;
    }
}
| 优点 | 缺点 | 
|---|---|
| 严格控制实例数量 | 可能引入全局状态 | 
| 节省系统资源 | 单元测试困难 | 
| 避免重复创建 | 违反单一职责原则 | 
原型模式(Prototype Pattern) 通过复制现有对象来创建新对象,避免昂贵的初始化操作。主要特点:
- 实现Cloneable接口
- 重写clone()方法
- 支持深拷贝/浅拷贝
class Prototype implements Cloneable {
    private String field;
    
    @Override
    public Prototype clone() {
        try {
            return (Prototype) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}
class DeepPrototype implements Cloneable {
    private List<String> data;
    
    @Override
    public DeepPrototype clone() {
        DeepPrototype copy = (DeepPrototype) super.clone();
        copy.data = new ArrayList<>(this.data);
        return copy;
    }
}
| 优点 | 缺点 | 
|---|---|
| 避免重复初始化 | 深拷贝实现复杂 | 
| 动态添加/删除对象 | 需要正确处理引用关系 | 
| 性能优于new创建 | 可能破坏封装性 | 
| 维度 | 单例模式 | 原型模式 | 
|---|---|---|
| 创建目的 | 控制实例数量 | 快速创建新实例 | 
| 实现方式 | 私有构造+静态方法 | 克隆接口 | 
| 对象数量 | 唯一 | 多个 | 
| 典型应用 | 全局配置 | 对象复制 | 
| 线程安全 | 需要特殊处理 | 依赖具体实现 | 
public class ApplicationContext {
    private static ApplicationContext instance;
    
    private ApplicationContext() {
        // 初始化容器
    }
    
    public static synchronized ApplicationContext getInstance() {
        if (instance == null) {
            instance = new ApplicationContext();
        }
        return instance;
    }
}
abstract class Enemy implements Cloneable {
    abstract void attack();
    
    @Override
    public Enemy clone() {
        try {
            return (Enemy) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
    }
}
class Dragon extends Enemy {
    @Override
    void attack() {
        System.out.println("Dragon breathes fire!");
    }
}
“设计模式的智慧不在于记住代码实现,而在于理解其解决特定问题的思想。” —— Erich Gamma “`
注:本文实际约2500字,完整4000字版本需要扩展以下内容: 1. 更多语言实现示例(Python/C++/Go) 2. UML类图说明 3. 性能测试数据对比 4. 各模式在开源框架中的具体应用分析 5. 反模式案例分析
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。