*Proxy Pattern : 어떤 작업의 실행을 대리인을 통해 실행하도록 하는 패턴
ScreenDisplay: 어떤 문자열을 화면에 출력하는 기능 제공
BufferDisplay: <대리인> 문자열을 출력할 때 ScreenDisplay 대신 해당 클래스 사용 가능.
Display: 두 Display를 하나의 타입으로 처리할 수 있도록 함, 또 시스템이 해당 인터페이스와 관계를 맺음으로써 관계의 수가 1개로 줄어드는 효과가 있음.

public interface Display {
void print(String content);
}
public class ScreenDisplay implement Display {
@Override
public void print(String content) { // content 출력에 상당한 시간 및 준비 작업이 필요하다 가정!
try {
Thread.sleep(500); // 준비 작업
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(content);
}
}
// 출력 시간을 단축하기 위해선 출력할 데이터를 최대한 모아 프린터 메서드를 최소한으로 호출하면 됌.
public class BufferDisplay implement Display {
private ArrayList<String> buffer new ArrayList<>();
prvate ScreenDisplay screen;
private int bufferSize;
public BufferDisplay(int bufferSize) {
this.bufferSize = bufferSize;
}
@Override
public void print(String content) {
buffer.add(content);
if(buffer.size() == bufferSize){
flush();
}
}
public void flush() {
if(screen == null) screen = new ScreenDisplay();
String lines = String.join("\n",buffer);
screen.print(lines);
buffer.clear();
}
}
구현한 클래스 활용.
// BufferDisplay 를 활용한 출력
public static void main(String[] args) {
Display display = BufferDisplay(5);
displat.print("1");
displat.print("2");
displat.print("3");
displat.print("4");
displat.print("5");
displat.print("6");
displat.print("7");
displat.print("8");
((BufferDisplay)display).flush();
// bufferSize 도달 못한 나머지 것 플러싱 필요!
}'코딩 > Software Architecture' 카테고리의 다른 글
| [GoF Design Pattern] Command (0) | 2022.12.04 |
|---|---|
| [GoF Design Pattern] Prototype (0) | 2022.12.03 |
| [GoF Design Pattern] Factory Method, Observer (0) | 2022.12.01 |
| [GoF Design Pattern] Singleton, Bridge, Template, Adapter (0) | 2022.11.26 |
| [GoF Design Pattern] 개요, Strategy, Iterator (0) | 2022.11.19 |