Business Delegate không nằm trong danh sách các pattern do các tác giả GoF thiết kế.
Besiness Delegate được sử dụng khi chúng ta muốn tách rời tầng biểu thị dữ liệu
presentation
và tầng logic quản lý business
. Pattern này thường được sử dụng để
giảm thiểu giao tiếp trong code của tầng presentation
tới tầng business
.
Trong Business Delegate, chúng ta có các thực thể sau:
Client
– Đại diện cho tầngpresentation
. Có thể là JSP, servlet, hoặc code UI.- Business
Delegate
– Đại diện cho tầngbusiness
để các thực thểClient
có thể truy xuất tới các chức năng quản lý BusinessService
. - Business
Service
– Một interface chung cho các class triển khai các chức năng quản lý. - Business
LookUp
– Object hỗ trợ BusinessDelegate
tìm kiếm chức năng phù hợp.
Áp dụng triển khai
Bước 1
Tạo giao diện Business Service
cho các class triển khai chức năng quản lý.
businessdelegate/service/Service.java
packagebusinessdelegate.service;publicinterfaceService{publicvoidprocess();}
Bước 2
Tạo các class triển khai Service
là EJB
và JMS
.
businessdelegate/service/EJB.java
packagebusinessdelegate.service;class EJB
implementsService{@Overridepublicvoidprocess(){System.out.println("EJB Service processing...");}}
businessdelegate/service/JMS.java
packagebusinessdelegate.service;class JMS
implementsService{@Overridepublicvoidprocess(){System.out.println("JMS Service processing...");}}
Bước 3
Tạo class hỗ trợ tìm kiếm chức năng Business LookUp
.
businessdelegate/service/LookUp.java
packagebusinessdelegate.service;publicclassLookUp{publicServicegetService(String serviceType){if("EJB".equalsIgnoreCase(serviceType))returnnewEJB();if("JMS".equalsIgnoreCase(serviceType))returnnewJMS();elsereturnnull;}}
Bước 4
Tạo class đại diện Business Delegate
.
businessdelegate/Delegate.java
packagebusinessdelegate;importbusinessdelegate.service.LookUp;importbusinessdelegate.service.Service;publicclassDelegate{privateService service;publicvoidsetType(String serviceType){LookUp lookup =newLookUp();
service = lookup.getService(serviceType);}publicvoidprocess(){
service.process();}}
Bước 5
Tạo class Client
.
Client.java
importbusinessdelegate.Delegate;publicclassClient{privateDelegate businessDelegate;publicClient(Delegate businessDelegate){this.businessDelegate = businessDelegate;}publicvoiddoTask(){
businessDelegate.process();}}
Bước 6
Sử dụng Business Delegate
và Client
để thử hoạt động của pattern.
PatternDemo.java
importbusinessdelegate.Delegate;publicclassPatternDemo{publicstaticvoidmain(String[] args){Delegate businessDelegate =newDelegate();Client client =newClient(businessDelegate);
businessDelegate.setType("EJB");
client.doTask();
businessDelegate.setType("JMS");
client.doTask();}}
Bước 7
Kiểm chứng lại kết quả được in ra ở console
.
console
EJB Service processing...
JMS Service processing...
Nguồn: viblo.asia