您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 什么是单例模式与原型模式
## 目录
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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。