1. 정의
- 특정 객체로의 접근을 제어하는 대리인(특정 객체를 대변하는 객체)을 제공한다.
2. 예시
- 클라이언트가 원격에 있는 부산과 제주도 기계의 로그를 요청한다.
3. 그림
4. 클래스 다이어그램
5. 코드
public class Client {
public static void main(String[] args){
String[] locations = new String[]{"부산 기계", "제주도 기계"};
System.out.println("[서울 본사에서 지방에 있는 기계 로그 요청]");
for (String lo : locations) {
Subject subject = new Proxy(lo);
System.out.println(subject.request());
}
}
}
/* 출력
[서울 본사에서 지방에 있는 기계 로그 요청]
부산에 있는 기계 로그 : Ok
제주도에 있는 기계 로그 : Ok
*/
public interface Subject {
String request();
}
public class Proxy implements Subject{
String location;
public Proxy(String location) {
this.location = location;
}
@Override
public String request() {
// 원격 요청
if(location.equals("부산 기계")){
return new BusanMachineSubjectImpl().request();
}
else return new JejuMachineSubjectImpl().request();
}
}
public class BusanMachineSubjectImpl implements Subject{
@Override
public String request() {
return "부산에 있는 기계 로그 : Ok";
}
}
public class JejuMachineSubjectImpl implements Subject{
@Override
public String request() {
return "제주도에 있는 기계 로그 : Ok";
}
}
https://github.com/kang-seongbeom/design_pattern
💡 Github에서 디자인 패턴 코드를 볼 수 있습니다.
6. 설명
- 프록시와 기계는 Subject를 구현한다.
- 같은 인터페이스를 구현하기 때문에, 클라이언트는 기계의 로그를 마치 로컬에 있는것 처럼 요청을 할 수 있다.
- 프록시가 클라이언트의 요청을 받아 RMI(Remote Method Invocation) 또는 API로 외부에 요청한다.
- 프록시가 결과를 반환 받으면 그 결과를 클라이언트에게 돌려준다.
'디자인 패턴' 카테고리의 다른 글
디자인 패턴 - 빌더 패턴(Builder Pattern) (0) | 2022.11.18 |
---|---|
디자인 패턴 - 브릿지 패턴(Bridge Pattern) (0) | 2022.11.18 |
디자인 패턴 - 상태 패턴(State Pattern) (0) | 2022.11.18 |
디자인 패턴 - 컴포지트 패턴(Composite Pattern) (0) | 2022.11.18 |
디자인 패턴 - 반복자 패턴(Iterator Pattern) (0) | 2022.11.18 |