1. 单例模式(Singleton)
java
// Spring Bean 默认就是单例
@Service
public class UserService {
// 整个应用只有一个 UserService 实例
}
2. 工厂模式(Factory)
java
// 策略管理器就是工厂模式的应用
@Component
public class SmsStrategy {
private Map<String, SmsService> SMS_SERVICES;
// 根据类型获取对应的实例
public SmsService getService(String channel) {
return SMS_SERVICES.get(channel);
}
}
3. 策略模式(Strategy)
java
// 定义策略接口
interface SmsService {
void send(String mobile, String code);
}
// 实现策略
class AliyunSmsService implements SmsService { }
class TencentSmsService implements SmsService { }
// 策略管理器
class SmsStrategy {
public void send(String channel, String mobile, String code) {
SmsService service = getService(channel);
service.send(mobile, code);
}
}
4.模板方法模式(Template Method)
java
// AbstractListener 是模板方法模式
public abstract class AbstractListener<T> {
// 模板方法(定义流程)
public void consumerMsg(Message msg, Channel channel) {
T data = resolverMsg(msg); // 子类实现
String key = getUniqueKey(data); // 子类实现
try {
consumer(data); // 子类实现
channel.basicAck(deliveryTag, true);
} catch (Exception e) {
handleException(e); // 统一异常处理
}
}
// 抽象方法(子类必须实现)
protected abstract T resolverMsg(Message msg);
protected abstract String getUniqueKey(T data);
protected abstract void consumer(T data);
}
// 具体实现
public class PayslipNoticeListener extends AbstractListener<PayslipNoticeDto> {
@Override
protected PayslipNoticeDto resolverMsg(Message msg) {
// 解析消息
}
@Override
protected String getUniqueKey(PayslipNoticeDto data) {
return "payslip:" + data.getSn();
}
@Override
protected void consumer(PayslipNoticeDto data) {
// 发送工资条通知
}
}
5.建造者模式(Builder)
java
// Lombok @Builder 注解
@Data
@Builder
public class UserTokenDTO {
private Integer userId;
private String token;
private String userName;
}
// 使用
UserTokenDTO dto = UserTokenDTO.builder()
.userId(123)
.token("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")
.userName("张三")
.build();
6.代理模式(Proxy)
java
// Feign 客户端就是代理模式
@FeignClient(url = "http://localhost:8082")
public interface PayrollClient {
@GetMapping("/payroll/{id}")
Payroll getById(@PathVariable Long id);
}
// Spring 生成代理对象,拦截方法调用,发送 HTTP 请求
7.观察者模式(Observer)
java
// Spring 事件机制
@Component
public class UserEventListener {
// 监听用户注册事件
@EventListener
public void onUserRegister(UserRegisterEvent event) {
log.info("用户注册事件: userId={}", event.getUserId());
// 发送欢迎邮件
// 发放新人优惠券
}
}
// 发布事件
@Service
public class UserService {
@Autowired
private ApplicationEventPublisher publisher;
public void register(User user) {
// 保存用户
userDao.save(user);
// 发布事件
publisher.publishEvent(new UserRegisterEvent(user.getId()));
}
}
8.责任链模式(Chain of Responsibility)
java
// 拦截器链就是责任链模式
请求
↓
拦截器1(认证)
↓
拦截器2(权限)
↓
拦截器3(日志)
↓
Controller