本文目录导读:

我来分享几个Java业务解耦的实战案例及优化方案。
事件驱动模式解耦
优化前:硬编码调用
@Service
public class OrderService {
@Autowired
private NotificationService notificationService;
@Autowired
private InventoryService inventoryService;
@Autowired
private CouponService couponService;
public void createOrder(Order order) {
// 业务逻辑
notificationService.sendNotification(order);
inventoryService.deductStock(order);
couponService.useCoupon(order);
// 后续新增业务还需要改这里
}
}
优化后:事件驱动
// 定义事件
public class OrderCreatedEvent {
private Order order;
// getter/setter
}
// 事件发布器
@Component
public class EventBus {
private List<EventHandler> handlers = new ArrayList<>();
public void register(EventHandler handler) {
handlers.add(handler);
}
public void publish(OrderCreatedEvent event) {
handlers.forEach(handler -> handler.handle(event));
}
}
// 事件处理器接口
public interface EventHandler {
void handle(OrderCreatedEvent event);
}
// 各自实现
@Component
public class NotificationHandler implements EventHandler {
@Override
public void handle(OrderCreatedEvent event) {
// 发送通知逻辑
}
}
@Component
public class InventoryHandler implements EventHandler {
@Override
public void handle(OrderCreatedEvent event) {
// 扣减库存逻辑
}
}
// 业务代码
@Service
public class OrderService {
@Autowired
private EventBus eventBus;
public void createOrder(Order order) {
// 核心业务逻辑
eventBus.publish(new OrderCreatedEvent(order));
}
}
策略模式解耦支付
优化前:大量if-else
@Service
public class PaymentService {
public void pay(String channel, Order order) {
if ("alipay".equals(channel)) {
// 支付宝支付逻辑
} else if ("wechat".equals(channel)) {
// 微信支付逻辑
} else if ("union".equals(channel)) {
// 银联支付逻辑
}
// 新增支付方式还要加else if
}
}
优化后:策略模式
// 支付策略接口
public interface PaymentStrategy {
boolean support(String channel);
void pay(Order order);
}
// 支付宝实现
@Component
public class AliPayStrategy implements PaymentStrategy {
@Override
public boolean support(String channel) {
return "alipay".equals(channel);
}
@Override
public void pay(Order order) {
// 支付宝支付
}
}
// 微信实现
@Component
public class WechatPayStrategy implements PaymentStrategy {
@Override
public boolean support(String channel) {
return "wechat".equals(channel);
}
@Override
public void pay(Order order) {
// 微信支付
}
}
// 策略选择器
@Component
public class PaymentStrategySelector {
@Autowired
private List<PaymentStrategy> strategies;
public PaymentStrategy select(String channel) {
return strategies.stream()
.filter(s -> s.support(channel))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("不支持的支付渠道"));
}
}
// 业务代码
@Service
public class PaymentService {
@Autowired
private PaymentStrategySelector selector;
public void pay(String channel, Order order) {
PaymentStrategy strategy = selector.select(channel);
strategy.pay(order);
}
}
模板方法模式解耦审批流程
// 审批模板
public abstract class ApprovalTemplate {
// 模板方法,定义流程骨架
public final void process(ApprovalContext context) {
// 1. 校验数据
validate(context);
// 2. 具体审批逻辑(子类实现)
doApprove(context);
// 3. 发送通知
notify(context);
// 4. 记录日志
log(context);
}
protected abstract void validate(ApprovalContext context);
protected abstract void doApprove(ApprovalContext context);
private void notify(ApprovalContext context) {
// 通用通知逻辑
}
private void log(ApprovalContext context) {
// 通用日志记录
}
}
// 具体审批实现
@Component
public class LeaveApproval extends ApprovalTemplate {
@Override
protected void validate(ApprovalContext context) {
// 请假审批校验
}
@Override
protected void doApprove(ApprovalContext context) {
// 请假审批逻辑
}
}
使用Spring事件机制(推荐)
// 事件定义
public class OrderCreatedEvent extends ApplicationEvent {
private Order order;
public OrderCreatedEvent(Object source, Order order) {
super(source);
this.order = order;
}
}
// 发布事件
@Service
public class OrderService {
@Autowired
private ApplicationEventPublisher publisher;
@Transactional
public void createOrder(Order order) {
// 核心业务
publisher.publishEvent(new OrderCreatedEvent(this, order));
}
}
// 监听事件(可以放在不同模块)
@Component
public class OrderEventListener {
@EventListener
@Async // 异步处理
public void handleOrderCreated(OrderCreatedEvent event) {
// 处理通知、库存等
}
@EventListener
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void handleAfterCommit(OrderCreatedEvent event) {
// 事务提交后的处理
}
}
核心优化原则
- 单一职责:每个类只负责一个功能
- 开闭原则:对扩展开放,对修改关闭
- 依赖倒置:面向接口编程
- 最少知识:类之间减少直接依赖
通过这些模式,可以显著提升代码的可维护性和可扩展性,根据实际业务场景选择合适的解耦方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播