Java设计模式详解:单例模式与工厂模式
需积分: 50 167 浏览量
更新于2024-07-16
收藏 414KB PDF 举报
"这份PDF详细阐述了Java中的23种设计模式,提供了每种模式的简要介绍和示例。"
在设计模式的世界里,单例模式(Singleton Pattern)是其中一个基础且重要的模式,它的核心目标是确保一个类在整个应用程序中只存在一个实例。如描述所示,通用的线程安全实现方式是通过私有构造函数防止外部直接实例化,并通过一个静态方法提供全局唯一的访问点。例如:
```java
public class Singleton {
private static final Singleton singleton = new Singleton();
private Singleton() {}
public static Singleton getSingleton() { return singleton; }
public static void doSomething() {}
}
```
这种实现方式在类加载时即创建了单例,因此是线程安全的。然而,如果不希望在类加载时就创建实例,可以使用懒汉式实现,但需要注意线程同步问题。如下面的非线程安全示例:
```java
public class Singleton {
private static Singleton singleton = null;
private Singleton() {}
public static synchronized Singleton getSingleton() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
// ...
}
```
这里,`getSingleton` 方法加了 `synchronized` 关键字以确保多线程环境下的安全。但同步操作会带来性能影响,因此可以优化为双重检查锁定(Double-Check Locking)模式,以减少同步开销:
```java
public class Singleton {
private volatile static Singleton singleton = null;
private Singleton() {}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
// ...
}
```
接下来是工厂模式(Factory Pattern),它是创建型设计模式的一种,用于提供创建对象的接口,而隐藏实际的创建过程。工厂模式让类的实例化延迟到子类中进行,这样可以解耦产品类和客户端之间的关系。例如,我们可以定义一个抽象工厂接口:
```java
public abstract class AbstractFactory {
public abstract Product createProduct();
}
public class ConcreteFactory1 extends AbstractFactory {
@Override
public Product createProduct() {
return new Product1();
}
}
public class ConcreteFactory2 extends AbstractFactory {
@Override
public Product createProduct() {
return new Product2();
}
}
```
在这个例子中,`AbstractFactory` 是工厂接口,`ConcreteFactory1` 和 `ConcreteFactory2` 是具体的工厂实现,它们分别创建 `Product1` 和 `Product2` 类的实例。
设计模式不仅仅是代码实现,更是一种软件设计思想的体现。通过合理地应用设计模式,可以提高代码的可读性、可维护性和复用性,从而提升软件系统的整体质量。在Java开发中,熟悉并掌握这些设计模式对于成为一名优秀的程序员至关重要。
216 浏览量
250 浏览量
1273 浏览量
434 浏览量
252 浏览量
2024-11-07 上传
傅里叶、
- 粉丝: 148
- 资源: 51
最新资源
- sms-infobip:通过Infobip发送短信
- clogger:用C编写的轻量级日志记录库
- 易语言易模块添加图标
- python基础篇
- vuebase:构建Vuebase:一个类似于Firebase的主题:https:vuebase-theme.firebaseapp.com用Vue和Vuetify(https:vuetifyjs.com)构建
- Image Injector-crx插件
- 人脸识别--毕业设计.zip
- graphql-spec:GraphQL是与任何后端服务绑定的查询语言和执行引擎
- 01.LCD5110显示环境信息.zip
- sgbf6
- jripple:jripple 提供了一个java API 来连接到ripple server
- PSParse-crx插件
- WELL_DATA.zip
- DBCameraButton:可自定义,IB_DESIGNABLE,iOS样式的相机按钮
- q
- 面向对象分析与设计