대상 객체(subject)에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 디자인 패턴
public interface Subject {
// 리소스가 적게 드는 일
void action1();
// 리소스가 많이 드는 일, 네크워크, 메모리
void action2();
}
public class Proxy implements Subject {
private Subject real;
public Proxy(Subject real) {
this.real = real;
}
@Override
public void action1() {
System.out.println("간단한 업무 by 프록시");
}
@Override
public void action2() {
this.real.action2(); // action2는 복잡하기 때문에 proxy가 할 수 없다
}
}
public class RealSubject implements Subject {
@Override
public void action1() {
System.out.println("간단한 업무 by 실제");
}
@Override
public void action2() {
System.out.println("복잡한 업무 by 실제");
}
}
public class Demo {
public static void main(String[] args) {
Subject real = new RealSubject();
Subject proxy1 = new Proxy(real);
Subject proxy2 = new Proxy(real);
proxy1.action1();
proxy2.action1();
proxy1.action2();
proxy2.action2();
}
}
/*
간단한 업무 by 프록시
간단한 업무 by 프록시
복잡한 업무 by 실제
복잡한 업무 by 실제
*
* */