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!"); }}工厂方法模式的优点:
- 代码不依赖于具体类。
- 添加新通知类型无需修改现有代码(开闭原则)。
- 简化单元测试。