Java设计模式实例详解:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java设计模式:从理论到实践



设计模式(Design Patterns)是软件开发中经过验证的典型问题解决方案。对于Java开发者来说,掌握设计模式不仅是优势,更是必备技能。它们能帮助你编写灵活、可维护且可扩展的代码。本文将结合Java实际案例,解析GoF(Gang of Four)目录中的四种关键设计模式。



为什么设计模式对Java开发者很重要?



Java是一种强类型面向对象语言,设计模式有助于:

  • 降低代码耦合度 — 类依赖于抽象而非具体实现。
  • 提高复用性 — 成熟的解决方案可轻松适配新需求。
  • 简化团队协作 — 设计模式是开发者之间的通用语言。


1. Singleton(单例模式)



单例模式确保一个类只有一个实例,并提供全局访问点。在Java中的经典实现如下:



public class DatabaseConnection {    private static volatile DatabaseConnection instance;    private String connectionString;

private DatabaseConnection(String connectionString) { this.connectionString = connectionString; }

public static DatabaseConnection getInstance(String connectionString) { if (instance == null) { synchronized (DatabaseConnection.class) { if (instance == null) { instance = new DatabaseConnection(connectionString); } } } return instance; }

public void connect() { System.out.println("Connected to: " + connectionString); }}


何时使用单例模式?

  • 管理数据库连接。
  • 日志记录器和配置管理器。
  • 线程池(Thread Pool)。


重要提示:在现代Java应用中,单例模式常被依赖注入(DI容器,如Spring)所取代。



2. Factory Method(工厂方法模式)



工厂方法模式定义创建对象的接口,但让子类决定实例化哪个类。来看一个创建通知的示例:



// 产品接口interface Notification {    void send(String message);}

// 具体产品class EmailNotification implements Notification { @Override public void send(String message) { System.out.println("Sending Email: " + message); }}

class SMSNotification implements Notification { @Override public void send(String message) { System.out.println("Sending SMS: " + message); }}

// 工厂abstract class NotificationFactory { public abstract Notification createNotification();

public void notifyUser(String message) { Notification notification = createNotification(); notification.send(message); }}

class EmailNotificationFactory extends NotificationFactory { @Override public Notification createNotification() { return new EmailNotification(); }}

class SMSNotificationFactory extends NotificationFactory { @Override public Notification createNotification() { return new SMSNotification(); }}

// 使用示例public class Main { public static void main(String[] args) { NotificationFactory factory = new EmailNotificationFactory(); factory.notifyUser("Hello, User!"); }}


工厂方法模式的优点:

  • 代码不依赖于具体类。
  • 添加新通知类型无需修改现有代码(开闭原则)。
  • 简化单元测试。

博客

书籍推荐