개발공부/Java
[Java] 프록시(Proxy) 패턴
환타몬
2022. 2. 7. 00:04
proxy는 대리인이라는 뜻으로써, 뭔가를 대신해서 처리하는 것
Proxy Class를 통해서 대신 전달하는 형태로 설계되며, 실제 Client는 Proxy로 부터 결과를 받는다.
Cache의 기능으로도 활용이 가능하다.
SOLID중에서 개방폐쇄 원칙(COP)와 의존 역전 원칙(DIP)를 따른다.
IBrowser.java
package com.company.design.proxy;
public interface IBrowser {
Html show();
}
- Html.java
package com.company.design.proxy;
public class Html {
private String url;
public Html(String url){
this.url = url;
}
}
- BrowserProxy.java
package com.company.design.proxy;
public class BrowserProxy implements IBrowser{
private String url;
private Html html;
public BrowserProxy(String url){
this.url = url;
}
@Override
public Html show() {
if(html == null){
this.html = new Html(url);
System.out.println("BrowserProxy loading html from :"+url);
}
System.out.println("BrowserProxy use cache html :"+url);
return html;
}
}
- Browser.java
package com.company.design.proxy;
public class Browser implements IBrowser{
private String url;
public Browser(String url){
this.url = url;
}
@Override
public Html show() {
System.out.println("browser loading html from : "+url);
return new Html(url);
}
}
- Main.java
package com.company.design;
import com.company.design.adapter.*;
import com.company.design.aop.AopBrowser;
import com.company.design.proxy.Browser;
import com.company.design.proxy.BrowserProxy;
import com.company.design.proxy.IBrowser;
import com.company.design.singleton.AClazz;
import com.company.design.singleton.BClazz;
import com.company.design.singleton.SocketClient;
import java.util.concurrent.atomic.AtomicLong;
public class Main {
public static void main(String[] args){
AtomicLong start = new AtomicLong();
AtomicLong end = new AtomicLong();
IBrowser aopBrowser = new AopBrowser("www.naver.com",
()->{
System.out.println("before");
start.set(System.currentTimeMillis());
},
()->{
long now = System.currentTimeMillis();
end.set(now - start.get());
}
);
aopBrowser.show();
System.out.println("loading time : "+end.get());
aopBrowser.show();
System.out.println("loading time : "+end.get());
}
}
======= 출력 =======