一、单例模式(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根据不同的资源加载策略加载资源(如文件系统、类路径等)。