springboot涉及到的设计模式用纯Java代码实现
时间: 2025-04-23 07:26:22 浏览: 15
<think>好的,我现在要解决用户的问题,他想用纯Java代码实现Spring Boot中涉及的设计模式示例。首先,我需要回顾一下用户提供的引用内容,看看有哪些设计模式被提到过。引用中提到了单例模式、策略模式、责任链模式,还有通过注解实现的AOP,可能涉及代理模式或装饰器模式。用户希望的是纯Java代码,不需要依赖Spring Boot的注解或框架特性,所以需要将这些设计模式用基础的Java来实现,同时保持Spring Boot中的使用场景。
首先,单例模式。在Spring Boot中,Bean默认是单例的,所以需要用Java实现单例。常见的单例实现方式有饿汉式、懒汉式、双重检查锁、静态内部类等。考虑到线程安全,静态内部类方式比较推荐。然后需要结合一个场景,比如数据库连接池,但这里可能需要简化,比如一个配置类。
然后是策略模式。引用中提到策略模式在Spring Boot中的应用,比如不同的支付方式。用纯Java的话,需要定义策略接口,然后不同的实现类,再有一个上下文类来选择策略。比如订单处理,根据不同用户类型使用不同折扣策略。
责任链模式在引用里提到用自定义注解和AOP实现,但用户需要纯Java。责任链模式通常涉及处理器链,每个处理器决定是否处理请求或传递给下一个。例如用户权限校验链,比如日志记录、权限检查、数据验证等步骤。
还有工厂模式,可能在配置属性类中提到,比如MqttProperties的创建。工厂模式可以通过一个工厂类来创建对象,隐藏具体实现。比如创建不同的数据库连接对象。
代理模式在AOP中应用,比如前置通知。用Java动态代理或静态代理来实现,比如记录方法执行时间。
现在需要将这些模式用纯Java代码示例展示,每个模式一个例子,并说明在Spring Boot中的对应场景。需要注意代码简洁,符合Java标准,不使用Spring特定注解。
接下来要检查每个模式的实现是否正确,是否符合用户需求。比如单例模式是否线程安全,策略模式是否有上下文类,责任链模式是否形成链式调用,工厂模式是否返回合适对象,代理模式是否使用动态代理等。
可能需要调整代码示例,确保没有依赖Spring框架,同时又能体现设计模式在Spring Boot中的应用场景。例如,单例模式对应Spring的Bean单例管理,策略模式对应不同的业务实现,责任链模式对应拦截器链或过滤器链,工厂模式对应Bean的创建,代理模式对应AOP的实现。
最后,生成相关问题,确保问题与设计模式及其实现相关,帮助用户进一步理解。</think>以下是通过纯Java代码实现Spring Boot中常用设计模式的示例,每种模式均对应Spring Boot中的典型应用场景:
### 一、单例模式(对应Spring Bean单例管理)
```java
// 静态内部类实现(线程安全)
public class AppConfig {
private static class Holder {
private static final AppConfig INSTANCE = new AppConfig();
}
private String env = "prod";
private AppConfig() {} // 私有构造函数
public static AppConfig getInstance() {
return Holder.INSTANCE;
}
public String getEnv() {
return env;
}
}
// 使用示例
AppConfig config = AppConfig.getInstance();
System.out.println("Current environment: " + config.getEnv());
```
*对应场景*:Spring默认单例Bean管理,如配置类实例[^2]
### 二、策略模式(对应支付/订单处理等场景)
```java
// 策略接口
interface DiscountStrategy {
double applyDiscount(double amount);
}
// 具体策略
class VipDiscount implements DiscountStrategy {
public double applyDiscount(double amount) {
return amount * 0.8;
}
}
class NormalDiscount implements DiscountStrategy {
public double applyDiscount(double amount) {
return amount * 0.95;
}
}
// 上下文类
class OrderService {
private DiscountStrategy strategy;
public void setStrategy(DiscountStrategy strategy) {
this.strategy = strategy;
}
public double calculateTotal(double amount) {
return strategy.applyDiscount(amount);
}
}
// 使用示例
OrderService service = new OrderService();
service.setStrategy(new VipDiscount());
System.out.println("VIP price: " + service.calculateTotal(100));
```
*对应场景*:多种支付方式/优惠策略的实现[^3]
### 三、责任链模式(对应拦截器链)
```java
abstract class Handler {
protected Handler next;
public Handler setNext(Handler next) {
this.next = next;
return next;
}
public abstract void handleRequest(String request);
}
class AuthHandler extends Handler {
public void handleRequest(String request) {
if (request.contains("auth=success")) {
System.out.println("Authentication passed");
if (next != null) next.handleRequest(request);
} else {
System.out.println("Authentication failed");
}
}
}
class LogHandler extends Handler {
public void handleRequest(String request) {
System.out.println("Logging request: " + request);
if (next != null) next.handleRequest(request);
}
}
// 构建责任链
Handler chain = new AuthHandler();
chain.setNext(new LogHandler());
// 使用示例
chain.handleRequest("GET /api/data?auth=success");
```
*对应场景*:请求处理链路(认证->日志->业务处理)[^5]
### 四、工厂模式(对应Bean创建)
```java
interface Connection {
void connect();
}
class MySQLConnection implements Connection {
public void connect() {
System.out.println("MySQL connected");
}
}
class RedisConnection implements Connection {
public void connect() {
System.out.println("Redis connected");
}
}
class ConnectionFactory {
public static Connection getConnection(String type) {
switch(type.toLowerCase()) {
case "mysql": return new MySQLConnection();
case "redis": return new RedisConnection();
default: throw new IllegalArgumentException("Invalid type");
}
}
}
// 使用示例
Connection conn = ConnectionFactory.getConnection("mysql");
conn.connect();
```
*对应场景*:不同数据源连接的创建管理[^4]
### 五、代理模式(对应AOP实现)
```java
interface UserService {
void saveUser();
}
class UserServiceImpl implements UserService {
public void saveUser() {
System.out.println("Saving user...");
}
}
class LoggingProxy implements UserService {
private UserService target;
public LoggingProxy(UserService target) {
this.target = target;
}
public void saveUser() {
System.out.println("[LOG] Method start");
target.saveUser();
System.out.println("[LOG] Method end");
}
}
// 使用示例
UserService service = new LoggingProxy(new UserServiceImpl());
service.saveUser();
```
*对应场景*:日志记录、性能监控等横切关注点[^5]
阅读全文
相关推荐


















