Java 23种设计模式简介

设计模式是软件开发中的重要概念,它提供了解决常见问题的经验和最佳实践。在Java中,有23种设计模式,分为三个主要类别:创建型模式、结构型模式和行为型模式。本文将简要介绍这些设计模式,并提供相应的代码示例。

1. 创建型模式

1.1 工厂模式(Factory Pattern)

工厂模式是一种用于创建对象的创建型模式,它提供了一种将对象创建的逻辑封装在一个独立的工厂类中的方式。通过使用工厂类,我们可以在不暴露对象创建逻辑的情况下获取对象的实例。

// 引用形式的描述信息:工厂接口
public interface ShapeFactory {
    Shape createShape();
}

// 引用形式的描述信息:具体工厂类
public class CircleFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Circle();
    }
}

// 引用形式的描述信息:产品接口
public interface Shape {
    void draw();
}

// 引用形式的描述信息:具体产品类
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle.");
    }
}

// 示例代码
public static void main(String[] args) {
    ShapeFactory factory = new CircleFactory();
    Shape shape = factory.createShape();
    shape.draw();
}

1.2 单例模式(Singleton Pattern)

单例模式是一种用于限制类实例化次数的创建型模式。它确保一个类只有一个实例,并提供一个全局访问点以获取该实例。

// 引用形式的描述信息:单例类
public class Singleton {
    private static Singleton instance;
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

// 示例代码
public static void main(String[] args) {
    Singleton singleton = Singleton.getInstance();
}

1.3 原型模式(Prototype Pattern)

原型模式是一种用于创建对象的创建型模式,它通过复制现有对象来创建新对象。这种方式可以提高对象的创建性能,特别是在创建过程中涉及复杂的初始化操作时。

// 引用形式的描述信息:原型接口
public interface Prototype {
    Prototype clone();
}

// 引用形式的描述信息:具体原型类
public class Circle implements Prototype {
    private int radius;
    
    public Circle(int radius) {
        this.radius = radius;
    }
    
    @Override
    public Prototype clone() {
        return new Circle(this.radius);
    }
}

// 示例代码
public static void main(String[] args) {
    Circle circle = new Circle(5);
    Circle clone = (Circle) circle.clone();
}

2. 结构型模式

2.1 适配器模式(Adapter Pattern)

适配器模式是一种用于将一个类的接口转换成客户端所期望的另一个接口的结构型模式。它可以解决由于接口不兼容而无法在一起工作的问题。

// 引用形式的描述信息:目标接口
public interface MediaPlayer {
    void play(String audioType, String fileName);
}

// 引用形式的描述信息:适配器类
public class MediaPlayerAdapter implements MediaPlayer {
    private AdvancedMediaPlayer advancedMediaPlayer;
    
    public MediaPlayerAdapter(AdvancedMediaPlayer advancedMediaPlayer) {
        this.advancedMediaPlayer = advancedMediaPlayer;
    }
    
    @Override
    public void play(String audioType, String fileName) {
        if (audioType.equals("mp4")) {
            advancedMediaPlayer.playMp4(fileName);
        } else if (audioType.equals("vlc")) {
            advancedMediaPlayer.playVlc(fileName);
        }
    }
}

// 示例代码
public static void main(String[] args) {
    MediaPlayer mediaPlayer = new MediaPlayerAdapter(new AdvancedMediaPlayer());
    mediaPlayer.play("mp4", "example.mp4");
}

2.2 桥接模式(Bridge Pattern)

桥接模式是一种用于将抽象和实现解耦的结构型模式。它将抽象和实现部分分离,使它们可以独立变化,同时为它们提供一个连接