JavaBusinessDelegatePattern(業務代表模式)

凌浩雨發表於2017-09-11

業務代表模式(Business Delegate Pattern)用於對錶示層和業務層解耦。它基本上是用來減少通訊或對錶示層程式碼中的業務層程式碼的遠端查詢功能。在業務層中我們有以下實體。

  • 客戶端(Client) – 表示層程式碼可以是 JSP、servlet 或 UI java 程式碼。
  • 業務代表(Business Delegate) – 一個為客戶端實體提供的入口類,它提供了對業務服務方法的訪問。
  • 查詢服務(LookUp Service) – 查詢服務物件負責獲取相關的業務實現,並提供業務物件對業務代表物件的訪問。
  • 業務服務(Business Service) – 業務服務介面。實現了該業務服務的實體類,提供了實際的業務實現邏輯。
  1. 建立 BusinessService 介面。
/**
 * 1. 建立 BusinessService 介面。
 * @author mazaiting
 */
public interface BusinessService {
    void doProcessing();
}
  1. 建立實體服務類
/**
 * 2. 建立實體服務類。
 * @author mazaiting
 */
public class EJBService implements BusinessService{

    public void doProcessing() {
        System.out.println("Processing task by invoking EJB Service");
    }

}

/**
 * 2. 建立實體服務類。
 * @author mazaiting
 */
public class JMSService implements BusinessService{

    public void doProcessing() {
        System.out.println("Processing task by invoking JMS Service");
    }

}
  1. 建立業務查詢服務。
/**
 * 3. 建立業務查詢服務。
 * @author mazaiting
 */
public class BusinessLookUp {
    public BusinessService getBusinessService(String serviceType){
        if (serviceType.equalsIgnoreCase("EJB")){
            return new EJBService();
        } else {
            return new JMSService();    
        }
    }
}
  1. 建立業務代表。
/**
 * 4. 建立業務代表。
 * @author mazaiting
 */
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();
    }
    
}
  1. 建立客戶端。
/**
 * 5. 建立客戶端。
 * @author mazaiting
 */
public class Client {
    BusinessDelegate businessDelegate;
    public Client(BusinessDelegate businessDelegate){
        this.businessDelegate = businessDelegate;
    }
    
    public void doTask(){
        businessDelegate.doTask();
    }
}
  1. 使用 BusinessDelegate 和 Client 類來演示業務代表模式。
/**
 * 6. 使用 BusinessDelegate 和 Client 類來演示業務代表模式。
 * @author mazaiting
 */
public class Test {
    
    public static void main(String[] args) {
        BusinessDelegate businessDelegate = new BusinessDelegate();
        businessDelegate.setServiceType("EJB");
        
        Client client = new Client(businessDelegate);
        client.doTask();
        
        businessDelegate.setServiceType("JMS");
        client.doTask();
        
    }
    
}

7.列印結果

Processing task by invoking EJB Service
Processing task by invoking JMS Service


相關文章