Java项目中最常用的6个设计模式

在 Java 项目开发中,以下 6 种设计模式因实用性强、应用场景广泛而被高频使用:

1. 单例模式(Singleton Pattern)

用途:确保一个类仅有一个实例,并提供全局访问点。场景:线程池、数据库连接池、配置类、日志工具等需要全局唯一实例的场景。实现方式:饿汉式、懒汉式(双重检查锁)、静态内部类、枚举(推荐,天然防止反射和序列化破坏)。
java
 
运行
// 枚举单例(最佳实践)
public enum Singleton {
    INSTANCE;
    public void doSomething() { ... }
}
 

2. 工厂模式(Factory Pattern)

分类:简单工厂、工厂方法、抽象工厂。用途:封装对象创建逻辑,解耦对象实例化与使用。场景:对象创建复杂(如参数多、依赖多)、需要灵活切换产品类型时(如数据库驱动切换、日志框架适配)。
java
 
运行
// 工厂方法示例
public interface LoggerFactory {
    Logger createLogger();
}

public class FileLoggerFactory implements LoggerFactory {
    @Override
    public Logger createLogger() { return new FileLogger(); }
}
 

3. 观察者模式(Observer Pattern)

用途:定义对象间一对多依赖,当一个对象状态变化时,所有依赖者自动收到通知。场景:事件监听(如 GUI 按钮点击)、消息订阅、Spring 的事件机制(ApplicationEvent)、RxJava 响应式编程。
java
 
运行
// JDK自带观察者接口
public class Subject extends Observable {
    public void changeState() {
        setChanged();
        notifyObservers(); // 通知观察者
    }
}

public class ObserverImpl implements Observer {
    @Override
    public void update(Observable o, Object arg) { ... }
}
 

4. 装饰器模式(Decorator Pattern)

用途:动态给对象添加功能,避免继承带来的类爆炸。场景:IO 流(BufferedReader装饰FileReader)、Spring 的TransactionProxy、MyBatis 的缓存装饰器。
java
 
运行
// IO中的装饰器示例
Reader reader = new BufferedReader(new FileReader("file.txt"));
 

5. 适配器模式(Adapter Pattern)

用途:将一个类的接口转换成客户端期望的另一个接口,解决接口不兼容问题。场景:集成第三方组件(接口不匹配)、旧系统改造(适配新接口)、SpringMVC 的HandlerAdapter
java
 
运行
// 类适配器示例
public interface Target { void request(); }
public class Adaptee { public void specificRequest() { ... } }
public class Adapter extends Adaptee implements Target {
    @Override
    public void request() { specificRequest(); }
}
 

6. 代理模式(Proxy Pattern)

分类:静态代理、动态代理(JDK 动态代理、CGLIB)。用途:控制对象访问,增强功能(如日志、事务、权限)。场景:Spring AOP(基于动态代理)、MyBatis 的 Mapper 代理、RPC 框架的远程代理。
java
 
运行
// JDK动态代理示例
public class ProxyHandler implements InvocationHandler {
    private Object target;
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 增强逻辑(如日志)
        return method.invoke(target, args);
    }
}
 

总结

这些模式覆盖了对象创建、行为扩展、接口适配、依赖管理等核心场景,是 Java 开发中解决常见问题的 “利器”。实际项目中,Spring、MyBatis 等框架也大量运用了这些模式,掌握它们能显著提升代码的可维护性和扩展性。
posted @ 2025-11-30 18:29  福寿螺888  阅读(0)  评论(0)    收藏  举报