1. 单例模式(Singleton)
// Spring Bean 默认就是单例
@Service
public class UserService {// 整个应用只有一个 UserService 实例
}
2. 工厂模式(Factory)
// 策略管理器就是工厂模式的应用
@Component
public class SmsStrategy {private Map<String, SmsService> SMS_SERVICES;// 根据类型获取对应的实例public SmsService getService(String channel) {return SMS_SERVICES.get(channel);}
}
3. 策略模式(Strategy)
// 定义策略接口
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)
// 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> {@Overrideprotected PayslipNoticeDto resolverMsg(Message msg) {// 解析消息}@Overrideprotected String getUniqueKey(PayslipNoticeDto data) {return "payslip:" + data.getSn();}@Overrideprotected void consumer(PayslipNoticeDto data) {// 发送工资条通知}
}
5.建造者模式(Builder)
// 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)
// Feign 客户端就是代理模式
@FeignClient(url = "http://localhost:8082")
public interface PayrollClient {@GetMapping("/payroll/{id}")Payroll getById(@PathVariable Long id);
}// Spring 生成代理对象,拦截方法调用,发送 HTTP 请求
7.观察者模式(Observer)
// Spring 事件机制
@Component
public class UserEventListener {// 监听用户注册事件@EventListenerpublic void onUserRegister(UserRegisterEvent event) {log.info("用户注册事件: userId={}", event.getUserId());// 发送欢迎邮件// 发放新人优惠券}
}// 发布事件
@Service
public class UserService {@Autowiredprivate ApplicationEventPublisher publisher;public void register(User user) {// 保存用户userDao.save(user);// 发布事件publisher.publishEvent(new UserRegisterEvent(user.getId()));}
}
8.责任链模式(Chain of Responsibility)
// 拦截器链就是责任链模式
请求↓
拦截器1(认证)↓
拦截器2(权限)↓
拦截器3(日志)↓
Controller