模式介绍

业务代表模式(Business Delegate Pattern)用于对表示层和业务层进行解耦。它基本上是用来减少通信或对表示层代码中的业务层代码的远程查询功能。

使用场景

  • 需要减少表示层和业务层之间的耦合
  • 需要简化业务层代码的访问
  • 需要统一管理业务服务的访问
  • 需要实现业务服务的缓存机制

代码示例

// 业务服务接口
public interface BusinessService {
    void doProcessing();
}

// 具体业务服务实现
public class EJBService implements BusinessService {
    @Override
    public void doProcessing() {
        System.out.println("Processing task by invoking EJB Service");
    }
}

public class JMSService implements BusinessService {
    @Override
    public void doProcessing() {
        System.out.println("Processing task by invoking JMS Service");
    }
}

// 业务查询服务
public class BusinessLookUp {
    public BusinessService getBusinessService(String serviceType) {
        if(serviceType.equalsIgnoreCase("EJB")) {
            return new EJBService();
        } else {
            return new JMSService();
        }
    }
}

// 业务代表
public class BusinessDelegate {
    private BusinessLookUp lookupService = new BusinessLookUp();
    private BusinessService businessService;
    private String serviceType;

    public void setServiceType(String serviceType) {
        this.serviceType = serviceType;
    }

    public void doTask() {
        businessService = lookupService.getBusinessService(serviceType);
        businessService.doProcessing();
    }
}

// 客户端
public class Client {
    BusinessDelegate businessService;

    public Client(BusinessDelegate businessService) {
        this.businessService = businessService;
    }

    public void doTask() {
        businessService.doTask();
    }
}

优缺点

优点

  • 降低表示层和业务层的耦合
  • 简化业务服务的访问
  • 提供统一的业务服务访问接口
  • 便于实现业务服务的缓存

缺点

  • 增加了系统的复杂度
  • 可能引入额外的性能开销
  • 需要维护额外的代码

注意事项

  • 合理设计业务服务接口
  • 注意业务服务的性能优化
  • 考虑异常处理机制
  • 合理使用缓存策略