여기 참조
객체가 직접적으로 기능을 수행하는 대신에 다른 객체에 해당 기능을 위임
인터페이스를 이용하여 구현하는 경우가 많음
예시
public enum PrinterType {
LASER, INKJET
}
public interface Printer {
void printDocument(String document);
PrinterType getType();
boolean isSameType(PrinterType type);
}
public class LaserPrinter implements Printer {
@Override
public void printDocument(String document) {
System.out.println("Laser Printer printing: " + document);
}
@Override
public PrinterType getType() {
return PrinterType.LASER;
}
@Override
public boolean isSameType(PrinterType type) {
return PrinterType.LASER.equals(type);
}
}
public class InkjetPrinter implements Printer {
@Override
public void printDocument(String document) {
System.out.println("Inkjet Printer printing: " + document);
}
@Override
public PrinterType getType() {
return PrinterType.INKJET;
}
@Override
public boolean isSameType(PrinterType type) {
return PrinterType.INKJET.equals(type);
}
}
public class PrinterManager {
private final List<Printer> printers;
public PrinterManager() {
printers = new ArrayList<>();
printers.add(new LaserPrinter());
printers.add(new InkjetPrinter());
}
public void print(String document, PrinterType type) {
printers.stream()
.filter(printer -> printer.isSameType(type))
.forEach(printer -> printer.printDocument(document));
}
}
public class Client {
public static void main(String[] args) {
PrinterManager manager = new PrinterManager();
manager.print("Hello, world!", PrinterType.LASER); // "Laser Printer printing: Hello, world!" 출력
manager.print("Hello, world!", PrinterType.INKJET); // "Ink
}
}
위임의 장점
- 객체간 결합도가 낮아짐
- 런타임에 구현체를 변경 가능(어차피 빌드는 다시해야하지 않나?)
- 위임하는 객체의 코드를 변경할 필요 없이 구현체를 추가하거나 교체하기 쉬움
'System Architect' 카테고리의 다른 글
Application (0) | 2023.10.28 |
---|---|
graphQL (0) | 2023.10.12 |
gRPC (0) | 2023.10.11 |
시스템설계 Q&A 2 (0) | 2023.09.20 |
데이터 분석 관련 정리 (0) | 2023.08.19 |