에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 원격 프록시
- 원격 객체의 로컬 대변자
- 어떤 메서드를 호출하면, 다른 원격 객체에게 그 메서드 호출을 전달해 주는 객체
- 핵심 작업이 아닌 저수준 작업을 프록시 객체에서 대신 처리함
- 클라이언트 객체는 원격 객체의 메서드 호출을 하는 것처럼 행동
2. RMI
- 클라이언트와 서비스 보조 객체를 만들어 줌
- 입출력 및 네트워크 관련 코드를 직접 작성하지 않아도 됨
스텁
- 클라이언트 보조 객체
스켈레톤
- 서비스 보조 객체
3. Dating
Person
public interface Person {
String getName();
String getGender();
String getInterests();
int getGeekRating();
void setName(String name);
void setGender(String gender);
void setInterests(String interests);
void setGeekRating(int rating);
}
- 자신의 정보를 직접 수정하는 것을 막아야 함
Proxy
InvocationHander (java.lang.reflect)
public interface InvocationHandler {
Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
}
- 프록시의 행동을 구현
public class OwnerInvocationHandler implements InvocationHandler {
Person person;
public OwnerInvocationHandler(Person person) { this.person = person; }
public Object invoke(Object proxy, Method method, Object[] args) throws IllegalAccessException {
try {
if (method.getName().equals("setGeekRating") throw new IllegalAccessException();
if (method.getName().startsWith("get") || method.getName().startsWith("set")) return method.invoke(person, args);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
}
- 자신 핸들러
- 클라이언트용 핸들러
동적 프록시 생성
Person getOwnerProxy(Person person) {
return (Person) Proxy.newProxyInstance(
person.getClass().getClassLoader(),
person.getClass().getInterfaces(),
new OwnerInvocationHandler(person));
}
'Java > Design Pattern' 카테고리의 다른 글
[헤드퍼스트 디자인 패턴] 12-2. 빌더 패턴 (0) | 2024.12.19 |
---|---|
[헤드퍼스트 디자인 패턴] 12-1. 브리지 패턴 (0) | 2024.12.18 |
[헤드퍼스트 디자인 패턴] 10. 상태 패턴 (0) | 2024.12.18 |
[헤드퍼스트 디자인 패턴] 9-2. 컴포지트 패턴 (0) | 2024.12.18 |
[헤드퍼스트 디자인 패턴] 9-1. 반복자 패턴 (0) | 2024.12.18 |