여러가지 디자인 패턴 - Proxy Pattern (프록시 패턴)

이진석·2022년 9월 9일
1
post-thumbnail

20220909

한 번에 끝내는 Java/Spring 웹 개발 마스터


1) Brwoser

package com.company.design.Proxy;

public class Browser {

    private final String url;

    public Browser(String url) {
        this.url = url;
    }

    public Html show() {
        System.out.println("browser loading html from : " + url);
        return new Html(url);
    }
}

2) BrowserProxy

package com.company.design.Proxy;

public class BrowserProxy implements IBrowser {

    private final String url;
    private Html html;

    public BrowserProxy(String url) {
        this.url = url;
    }

    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;
    }
}

3) Html

package com.company.design.Proxy;

public class Html {

    private final String url;

    public Html(String url) {
        this.url = url;
    }
}

4) IBrowser

package com.company.design.Proxy;

public interface IBrowser {

    Html show();
}

5) Main

	///Proxy Pattern
	Browser browser = new Browser("www.naver.COM");
	browser.show();
	browser.show();
	browser.show();
	browser.show();

	IBrowser browser1 = new BrowserProxy("www.naver.com");
	browser1.show();
	browser1.show();
	browser1.show();
	browser1.show();

	///AopBrowser(?)
	AtomicLong start = new AtomicLong();
	AtomicLong end = new AtomicLong();

	AopBrowser aopBrowser = new AopBrowser("www.google.com",
		() -> {
			System.out.println("before");
			start.set(System.currentTimeMillis());
		},
		() -> {
			System.out.println("after");
			end.set(System.currentTimeMillis() - start.get());
            }
        );
        aopBrowser.show();
        System.out.println(end + " ms");

  • Proxy패턴에 대한 코드를 오늘 처음 배워보았다.
  • Proxy는 대리인이라는 뜻으로, Proxy class를 통해서 대신 전달하는 형태로 설계되고, 실제 client는 Proxy에서 결과를 가져온다는 패턴의 형태라고 한다.
  • 잘 모르는 부분인 만큼 추가적인 복습이 더 필요할 듯 하다,,,
profile
혼자서 코딩 공부하는 전공생 초보 백엔드 개발자 / https://github.com/leejinseok0614

0개의 댓글