복잡한 로직을 숨기고 간단한 인터페이스만 제공하는 패턴
1. 코드
RouteFacade : 인터페이스를 제공하는 facade 클래스
public class RouteFacade {
public static int getMinimumNeedTime(int startX, int startY, int endX, int endY) {
// 로직1. x,y 좌표를 주소로 변환
String start = XYConverter.toAddress(startX, startY);
String end = XYConverter.toAddress(endX, endY);
// 로직2. 여러 가지 경로를 검색
List<Route> routeList = Route.searchByAddress(start, end);
// 로직3. 최단 시간 탐색
RouteSelector routeSelector = new RouteSelector(routeList);
Route minimumNeedTimeRoute = routeSelector.getShortestNeedTimeRoute();
return minimumNeedTimeRoute.getNeedTime();
}
}
XYConverter : 로직1(좌표를 주소로 변환)을 수행하는 클래스
public class XYConverter {
public static String toAddress(long x, long y) {
return "아무 주소";
}
}
Route : 로직2(여러 경로 탐색)을 수행하는 클래스
public class Route {
private String route;
private int needTime;
private Route(String route, int needTime) {
this.route = route;
this.needTime = needTime;
}
public String getRoute() {
return route;
}
public int getNeedTime() {
return needTime;
}
public static List<Route> searchByAddress(String start, String end) {
Random random = new Random();
List<Route> routeList = new ArrayList<>();
for (int i=0;i<10;i++) {
String route = "route" + i;
int needTime = random.nextInt(100);
routeList.add(new Route(route, needTime));
}
return routeList;
}
}
RouteSelector : 로직3(여러 경로 중 최단시간을 구하는 로직)을 수행하는 클래스
public class RouteSelector {
private List<Route> routeList;
public RouteSelector(List<Route> routeList) {
this.routeList = routeList;
}
public Route getShortestNeedTimeRoute() {
Route shortestRoute = routeList.get(0);
for (int i = 1; i < routeList.size(); i++) {
if (shortestRoute.getNeedTime() > routeList.get(i).getNeedTime()) {
shortestRoute = routeList.get(i);
}
}
return shortestRoute;
}
}
Main: 테스트 클래스
public class Main {
public static void main(String[] args) {
int minimumNeedTime = RouteFacade.getMinimumNeedTime(0, 0, 100, 100);
System.out.println(minimumNeedTime);
}
}
2. 특징
- 로직을 호출하는 부분에서는 로직이 어떻게 돌아가는지 신경을 쓸필요가 없음
- 인터페이스와 같은 역할을 하는 패턴
3. 해당 패턴을 고려해볼만한 상황
- 복잡한 로직이 요구되고 로직의 변경이 예상될때
- 외부 시스템에 해당 기능을 제공할 때
'디자인 패턴 > Java언어로 배우는 디자인패턴 입문 책 정리' 카테고리의 다른 글
Observer 패턴 (0) | 2021.02.21 |
---|---|
Mediator 패턴 (0) | 2021.02.14 |
Chain Of Responsibility 패턴 (0) | 2021.02.11 |
Visitor 패턴 (0) | 2021.02.07 |
Decorator 패턴 (0) | 2021.01.30 |