一、单例模式(Singleton Pattern)
-
定义:确保一个类只有一个实例,并提供全局访问点
-
Spring中的应用:Spring默认将Bean配置为单例模式
-
案例:
@Component
public class MySingletonBean {
// Spring 默认将其管理为单例
}
- 在spring容器中,MySingletonBean只会有一个实例
二、工厂模式(Factory Pattern)
-
定义:定义一个创建对象的接口,由子类决定实例化哪个类
-
spring中的应用:BeanFactory和ApplicationContext是工厂模式的实现
-
案例:
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
- AppConfig是一个工厂类,myBean()方法负责创建MyBean实例
三、原型模式(Prototype Pattern)
-
定义:通过复制现有对象来创建新对象
-
Spring中的应用:通过@Scope("prototype")配置Bean为原型模式
-
案例
@Component
@Scope("prototype")
public class MyPrototypeBean {
// 每次获取时都会创建一个新实例
}
四、模板方法模式(Template Method Pattern)
-
定义:定义一个算法的骨架,将某些步骤延迟到子类中实现
-
Spring中的应用:JdbcTemplate、RestTemplate等
-
案例:
@Autowired
private JdbcTemplate jdbcTemplate;
public void queryData() {
String sql = "SELECT * FROM users";
jdbcTemplate.query(sql, (rs, rowNum) -> {
System.out.println(rs.getString("username"));
return null;
});
}
五、适配器模式(Adapter Pattern)
-
定义:将一个类的接口转换成客户端期望的另一个接口
-
spring中的应用:Spring MVC中的HandlerAdapter
-
案例:
@Controller
public class MyController {
@RequestMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
六、装饰者模式(Decorator Pattern)
-
定义:动态地为对象添加额外的职责
-
spring中的应用:spring AOP中的代理
-
案例:
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println("Before method: " + joinPoint.getSignature().getName());
}
}
- AOP通过装饰者模式为方法添加日志功能
七、观察者模式(Observer Pattern)
-
定义:定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖对象都会收到通知
-
spring容器中的应用:Spring的事件机制
-
案例:
@Component
public class MyEventListener implements ApplicationListener<MyEvent> {
@Override
public void onApplicationEvent(MyEvent event) {
System.out.println("Event received: " + event.getMessage());
}
}
@Component
public class MyEventPublisher {
@Autowired
private ApplicationEventPublisher publisher;
public void publishEvent(String message) {
publisher.publishEvent(new MyEvent(this, message));
}
}
- MyEventPublisher发布事件,MyEventListener监听并处理
八、代理模式(Proxy Pattern)
-
定义:为其他对象提供一个代理以控制对这个对象的访问
-
Spring中的应用:SpringAOP和动态代理
-
案例:
@Service
public class MyService {
public void doSomething() {
System.out.println("Doing something...");
}
}
@Aspect
@Component
public class MyAspect {
@Around("execution(* com.example.service.MyService.*(..))")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Before method");
Object result = joinPoint.proceed();
System.out.println("After method");
return result;
}
}
- AOP通过代理模式为MyService的方法添加额外逻辑
九、组合模式(Composite Pattern)
-
定义:将对象组合成树形结构以表示"部分-整体"的层次结构
-
spring中的应用:Spring Security的过滤器链
-
案例:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/public/**").permitAll()
.antMatchers("/private/**").authenticated();
}
}
- Spring Security将多个过滤器组合成一个过滤器链
十、策略模式(Strategy Pattern)
-
定义:定义一系列算法,将它们封装起来,并使它们可以互相替换
-
Spring中的应用:Spring的资源加载策略(ResourceLoader)
-
案例:
@Autowired
private ResourceLoader resourceLoader;
public void loadResource() {
Resource resource = resourceLoader.getResource("classpath:data.txt");
System.out.println("Resource loaded: " + resource.exists());
}
- ResourceLoader根据不同的资源加载策略加载资源(如文件系统、类路径等)。