Java设计模式入门,单例、工厂模式实战讲解

iT日记 编程开发

Java设计模式入门,单例、工厂模式实战讲解-第1张图片-iT日记在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设计模式入门 单例 工厂模式 实战讲解

上一篇Python生成器与迭代器,提升代码效率的技巧

下一篇当前分类已是最新一篇