Java框架设计模式实践解析
设计模式分类概览
设计模式代表软件设计的最佳实践,可分为三类:
- 创建型模式:抽象对象实例化过程,分离对象创建与使用逻辑
- 结构型模式:通过类/对象组合构建复杂结构,采用继承或引用实现
- 行为型模式:定义对象间交互机制与算法分配原则
责任链模式
实现原理
将多个处理对象串联成链,使每个对象都能处理请求:
// Tomcat过滤器链实现
public void processRequest(ServletRequest req, ServletResponse res) {
executeInternal(req, res);
}
private void executeInternal(ServletRequest req, ServletResponse res) {
if (currentIndex < totalFilters) {
FilterConfig config = filterChain[currentIndex++];
Filter filter = config.getFilterInstance();
filter.execute(req, res, this);
}
}
应用场景:动态路由请求、可扩展处理流程
工厂模式
Spring BeanFactory实现
// Bean工厂使用示例
public void testBeanCreation() {
DefaultBeanFactory factory = new DefaultBeanFactory();
loadDefinitions(factory, "config.xml");
Service service = (Service) factory.getBean("serviceBean");
service.execute();
}
核心价值:封装对象创建逻辑,实现组件解耦
单例模式
Spring单例实现
protected Object createSingleton(String beanId, ObjectFactory factory) {
synchronized (singletonCache) {
Object instance = singletonCache.get(beanId);
if (instance == null) {
instance = factory.createInstance();
singletonCache.put(beanId, instance);
}
return instance;
}
}
应用场景:全局配置管理、资源池共享
策略模式
Spring AOP代理策略
public ProxyCreator createProxy(AdvisorConfig config) {
if (config.requiresCglib()) {
return new CglibProxyGenerator(config);
} else {
return new JdkDynamicProxy(config);
}
}
设计优势:运行时动态选择算法实现
适配器模式
Spring AOP通知适配
class BeforeAdviceAdapter implements AdvisorAdapter {
public MethodInterceptor adapt(Advice advice) {
return new BeforeAdviceInterceptor((MethodBeforeAdvice)advice);
}
}
class BeforeAdviceInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation invocation) {
advice.preProcess(invocation.getMethod(), invocation.getArgs());
return invocation.proceed();
}
}
应用场景:接口转换、协议兼容
观察者模式
Spring事件机制
// 事件监听器注册
public void registerListeners(ApplicationContext context) {
context.addListener(new ContextRefreshListener());
context.addListener(new RequestHandledListener());
}
// 事件发布
public void publishEvent(ApplicationEvent event) {
for (ApplicationListener listener : listeners) {
listener.onApplicationEvent(event);
}
}
典型应用:状态变更通知、事件驱动架构
命令模式
Tomcat请求处理
Connector将请求封装为Command对象,通过Adapter分发给对应Host处理
public void service(RequestCommand command) {
Host targetHost = locateHost(command);
Context targetContext = targetHost.mapContext(command);
targetContext.handleRequest(command);
}
架构优势:解耦请求发送者与处理者