常用设计模式及实际场景
一、创建型模式
1. 单例模式(Singleton)
场景:确保一个类只有一个实例,用于全局配置类、连接池、线程池
public class Config {private static final Config INSTANCE = new Config();private Config() {}public static Config getInstance() { return INSTANCE; }}
2. 工厂模式(Factory)
场景:对象创建逻辑复杂,如 JDBC Connection、Spring BeanFactory
Connection conn = DriverManager.getConnection(url, user, password);
3. 建造者模式(Builder)
场景:构建不可变对象,如 StringBuilder、OkHttpClient、Lombok @Builder
User user = User.builder().name("张三").age(25).build();
二、结构型模式
4. 代理模式(Proxy)
场景:AOP切面、MyBatis懒加载、Spring事务、RPC远程调用
// Spring AOP 底层就是代理模式@Transactionalpublic void update() { }
5. 装饰器模式(Decorator)
场景:IO流包装、BufferedInputStream、日志增强
// Java IO 流就是装饰器模式InputStream in = new BufferedInputStream(new FileInputStream("file.txt"));
6. 适配器模式(Adapter)
场景:转换接口、数据转换、旧系统对接
// Spring MVC HandlerAdapter、兼容新旧接口List<String> result = Collections.enumeration(list);
三、行为型模式
7. 策略模式(Strategy)
场景:多种支付方式、排序算法切换、促销打折
interface PayStrategy { void pay(); }class AliPay implements PayStrategy { }class WechatPay implements PayStrategy { }
8. 观察者模式(Observer)
场景:事件监听、消息订阅、GUI事件、Kafka消息队列
// Spring ApplicationEvent、MQ消息发布订阅applicationContext.publishEvent(new MyEvent());
9. 模板方法模式(Template Method)
场景:Spring JdbcTemplate、HibernateTemplate、流程固定细节不同
// Spring JdbcTemplatepublic void execute(ConnectionCallback<T> action) {Connection conn = getConnection();T result = action.doInConnection(conn);close(conn);return result;}
10. 责任链模式(Chain of Responsibility)
场景:过滤器链、拦截器链、审批流程
// Spring Security FilterChain、MyBatis PluginFilterChain chain = new FilterChainImpl();
11. 状态模式(State)
场景:订单状态流转、游戏状态机、审批流程
// 订单:待支付 → 已支付 → 已发货 → 已完成interface OrderState { void handle(); }
四、实际开发高频使用
| 排名 | 模式 | 实际应用 |
|---|---|---|
| 1 | 单例 | Spring Bean默认单例、Config配置类 |
| 2 | 代理 | Spring AOP、事务管理、MyBatis |
| 3 | 工厂 | Spring BeanFactory、MyBatis SqlSessionFactory |
| 4 | 策略 | Spring Validation、多种实现切换 |
| 5 | 模板方法 | JdbcTemplate、RestTemplate |
| 6 | 观察者 | Spring Event、MQ |
| 7 | 装饰器 | IO流、各种Wrapper类 |
| 8 | 责任链 | Spring Security、Netty Pipeline |
五、Spring中的设计模式
Spring Bean 创建├── 单例模式(默认作用域)├── 工厂模式(BeanFactory)├── 代理模式(AOP)└── 模板方法(JdbcTemplate)Spring MVC├── 适配器模式(HandlerAdapter)├── 责任链模式(HandlerInterceptor)└── 策略模式(HandlerMapping)Spring 事务└── 代理模式(TransactionInterceptor)
六、MyBatis中的设计模式
SqlSessionFactoryBuilder → 建造者模式Executor → 模板方法模式Connection → 工厂模式MetaObject → 装饰器模式Plugin → 代理模式
需要我详细解释某个模式或提供更具体的代码示例吗?
正文完