본문 바로가기

PATTERN

[PATTERN] DelegationPattern

정의

Business delegate pattern은 Java EE design pattern의 하나로 특정 케이스마다 처리해야 하는 로직이 틀린 경우에 사용이 되는 패턴입니다. 

 

아래 구조를 보면 클라이언트는 Business delegate에게 이런 비즈니스 로직을 수행하겠어 요청을 하면  Lookup Service가 상황에 맞는 비즈니스클래스를 룩업해 로직을 수행하도록 합니다.

 

Structure

  • Business delegate - client가 특정 서비스를 요청할 클래스 (비즈니스 로직 안가지고 있음)
  • Lookup Service - delegate가 호출하는 클래스로 특정 케이스마다 처리를 담당하는 실제 구현체를 반환
  • Business Service - 실제 사용될 서비스 인터페이스로 실제 비즈니스 로직은 이 클래스를 구현을 해야 함

 

Implementation

 

Business Service

public interface BusinessService {
	void doProcess();
}


public class ConcreteService implements BusinessService {
	public ConcreteService() {
	}
	
	@Override
	public  void doProcess() {
		System.out.println("ConcreteService business logic do something");
	}
	
}



public class ConcreteService2 implements BusinessService {
	public ConcreteService2() {
	}
	
	@Override
	public  void doProcess() {
		System.out.println("ConcreteService2 business logic do something");
	}
}

 

Lookup Service

public class ServiceLookUp {
	public BusinessService getService(int gubn) {
		
		if(gubn == 1) {
			return new ConcreteService();
		} else {
			return new ConcreteService2();
		}
	}
}

 

Business delegate

public class ServiceDelegate {

	private ServiceLookUp serviceLookUp = new ServiceLookUp();
	
	public void doProcess(int gubn) {
		BusinessService businessService = serviceLookUp.getService(gubn);
		businessService.doProcess();
	}
}

> ServiceDelegate의 doProcess(gubn)을 호출하면 구분 값에 맞게 실제로 구현된 서비스롤 호출하게된다.

 

의와 같은 구조 외에 단순히 특정기능을 다른 클래스에 맡긴다면 delegation이다

package delegation;

public class ServiceA {
	ServiceB serviceB = new ServiceB();
	public void doSomting() {
		serviceB.doSomting();
	}
}
========================================================
package delegation;

public class ServiceB {
	public void doSomting() {
		System.out.println("ServiceB do something");
	}
}

ServiceA가 해야할 어떤 일을 ServiceB에게 떠넘긴다.

 

참고

https://jaepils.github.io/pattern/2018/07/24/pattern-delegate.html

 

'PATTERN' 카테고리의 다른 글

[PATTERN] Proxy Pattern  (0) 2021.09.24
[PATTERN] Producer - Consumer  (0) 2021.08.27
[PATTERN]Adapter Pattern  (0) 2021.07.14