在Java编程领域,设计模式是提升代码质量、增强代码可维护性和可扩展性的重要手段。其中,单例模式和工厂模式是最为基础且实用的设计模式,对于初学者而言,掌握这两种模式是迈向高级Java编程的关键一步。单例模式确保一个类只有一个实例,并提供一个全局访问点,这在许多场景下都非常有用,比如数据库连接池、线程池等,避免了资源的重复创建和浪费。工厂模式则是一种创建对象的设计模式,它将对象的创建和使用分离,使得代码更加灵活,能够根据不同的条件创建不同类型的对象。下面我们将通过实战案例详细讲解这两种设计模式的应用。
# 单例模式实战讲解
单例模式有多种实现方式,常见的有饿汉式、懒汉式和双重检查锁定等。
饿汉式单例
饿汉式单例在类加载时就创建了实例,代码如下:
```java
public class EagerSingleton {
private static final EagerSingleton INSTANCE = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return INSTANCE;
}
}
```
饿汉式的优点是实现简单,线程安全,但缺点是在类加载时就创建实例,可能会造成资源浪费。
懒汉式单例
懒汉式单例在第一次使用时才创建实例,代码如下:
```java
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
```
懒汉式避免了饿汉式的资源浪费问题,但在多线程环境下可能会出现线程安全问题。为了解决这个问题,可以使用双重检查锁定。
双重检查锁定单例
```java
public class DoubleCheckedLockingSingleton {
private static volatile DoubleCheckedLockingSingleton instance;
private DoubleCheckedLockingSingleton() {}
public static DoubleCheckedLockingSingleton getInstance() {
if (instance == null) {
synchronized (DoubleCheckedLockingSingleton.class) {
if (instance == null) {
instance = new DoubleCheckedLockingSingleton();
}
}
}
return instance;
}
}
```
双重检查锁定既保证了线程安全,又避免了不必要的同步开销。
# 工厂模式实战讲解
工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式,这里我们以简单工厂模式为例进行讲解。
简单工厂模式是工厂模式的基础,它定义了一个工厂类来负责创建对象。假设我们有一个图形接口`Shape`和两个实现类`Circle`和`Rectangle`,代码如下:
```java
// 图形接口
interface Shape {
void draw();
}
// 圆形实现类
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
// 矩形实现类
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a rectangle");
}
}
// 简单工厂类
class ShapeFactory {
public static Shape getShape(String shapeType) {
if (shapeType == null) {
return null;
}
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
}
```
使用简单工厂模式创建对象的代码如下:
```java
public class FactoryPatternDemo {
public static void main(String[] args) {
Shape circle = ShapeFactory.getShape("CIRCLE");
circle.draw();
Shape rectangle = ShapeFactory.getShape("RECTANGLE");
rectangle.draw();
}
}
```
简单工厂模式将对象的创建和使用分离,使得代码更加灵活,当需要添加新的图形类时,只需要修改工厂类即可。
通过以上单例模式和工厂模式的实战讲解,我们可以看到设计模式在Java编程中的重要性。掌握这些设计模式,能够让我们写出更加优雅、高效、可维护的代码。在实际开发中,我们应该根据具体的需求选择合适的设计模式,不断提升自己的编程能力。
标签: Java设计模式入门 单例 工厂模式 实战讲解


