Java Design Pattern - Business Delegate Pattern
업데이트:
Design Pattern
- 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
- 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.
Business Delegate Pattern
- Java EE 디자인 패턴이다.
- 프레젠테이션 계층과 비즈니스 계층을 분리하여 결합을 줄이고 서비스의 세부 구현 정보를 캡슐화 하는데 사용된다.
- 기본적으로 프레젠테이션 계층 코드에서 비즈니스 계층 코드에 대한 통신 또는 원격 조회 기능을 줄이는 데 사용된다.
Example
public interface BusinessService {
public void doProcessing();
}
public class DefaultService implements BusinessService {
@Override
public void doProcessing() {
System.out.println("Processing task by invoking Default Service");
}
}
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");
}
}
- BusinessService 인터페이스와 이의 구현체인 DefaultService, EJBService, JMSService를 정의한다.
public enum ServiceType {
EJB, JMS;
}
public class BusinessDelegate {
private BusinessLookUp lookupService = new BusinessLookUp();
private BusinessService businessService;
private ServiceType serviceType;
public void setServiceType(ServiceType serviceType) {
this.serviceType = serviceType;
}
public void doTask() {
businessService = lookupService.getBusinessService(serviceType);
businessService.doProcessing();
}
}
public class BusinessLookUp {
public BusinessService getBusinessService(ServiceType serviceType) {
switch (serviceType) {
case EJB:
return new EJBService();
case JMS:
return new JMSService();
default:
return new DefaultService();
}
}
}
- BusinessService를 특정 ServiceType에 맞게 실행 가능하도록 BusinessDelegate를 정의한다.
- BusinessLookUp 클래스는 ServiceType 별 BusinessService를 호출하는 역할을 담당한다.
public class Client {
BusinessDelegate businessDelegate;
public Client(BusinessDelegate businessDelegate) {
this.businessDelegate = businessDelegate;
}
public void doTask() {
businessDelegate.doTask();
}
}
- Client는 BusinessDelegate를 활용하여 Business를 수행할 수 있도록 구현한다.
public class BusinessDelegatePatternMain {
public static void main(String[] args) {
BusinessDelegate businessDelegate = new BusinessDelegate();
businessDelegate.setServiceType(ServiceType.EJB);
Client client = new Client(businessDelegate);
client.doTask();
businessDelegate.setServiceType(ServiceType.JMS);
client.doTask();
}
}
- ServiceType을 변경하면서 Client의 doTask() 메서드를 호출해본다.
Source
Sample Code는 여기에서 확인 가능합니다.
댓글남기기