1. 하위 클래스에서 구체적으로 처리한다
- 상위 클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적 내용을 결정하는 디자인 패턴
- 상위 클래스 쪽에 템플릿이될 메서드가 정의되어 있고, 그 메소드 정의에 추상 메소드가 사용된다.
- 추상 메서드를 실제로 구현하는 것은 하위 클래스이다.
2. 예제
- 추상 클래스 AbstractDisplay
public abstract class AbstractDisplay {
// open, print, close는 하위 클래스에 구현을 맡기는 추상 메서드
public abstract void open();
public abstract void print();
public abstract void close();
// display는 AbstractDisplay에서 구현하는 메소드
public final void display() {
open();
for (int i = 0; i < 5; i++) {
print();
}
close();
}
}
- class CharDisplay
public class CharDisplay extends AbstractDisplay{
private char ch; // 표시해야 하는 문자
// <<"print()">>
// 생성자
public CharDisplay(char ch) {
this.ch = ch;
}
@Override
public void open() {
// 시작 문자열 "<<"를 표시한다.
System.out.print("<<");
}
@Override
public void print() {
System.out.print(ch);
}
@Override
public void close() {
System.out.println(">>");
}
}
- class StringDisplay
public class StringDisplay extends AbstractDisplay{
private String string; // 표시해야 하는 문자열
private int width; // 문자열의 길이
// 생성자
public StringDisplay(String string){
this.string = string;
this.width = string.length();
}
@Override
public void open(){
printLine();
}
@Override
public void print() {
System.out.println("|" + string + "|");
}
@Override
public void close(){
printLine();
}
// open과 close에서 호출되어 "+-----+" 문자열을 표시하는 메소드
private void printLine() {
System.out.print("+");
for(int i = 0; i < width; i++){
System.out.print("-");
}
System.out.println("+");
}
}
- Main
public class Main {
public static void main(String[] args) {
// 'H'를 가진 CharDisply 인스턴스를 하나 만든다
AbstractDisplay d1 = new CharDisplay('H');
// "Hello, world."를 가진 StringDisplay 인스턴스를 하나 만든다
AbstractDisplay d2 = new StringDisplay("Hello, world.");
// d1,d2 모두 같은 AbstractDisplay의 하위 클래스의 인스턴스이므로
// 상속한 display 메소드를 호출할 수 있다.
// 실제 동작은 CharDisplay나 StringDisplay 클래스에서 정해진다
d1.display();
d2.display();
}
}
- 결과
'디자인 패턴' 카테고리의 다른 글
5. Strategy - 패스트캠퍼스 백엔드 부트캠프 3기 (1) | 2025.02.17 |
---|---|
3. Prototype - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.02.10 |
2. Flyweight(추가예정) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.06 |
1. Singleton - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.02.06 |