상위 클래스에서 로직의 흐름을 정의, 하위 클래스에서 흐름에 쓰이는 method를 구현하는 패턴
1. 코드
AbstractDisplay : 로직의 흐름을 기술한 상위 클래스
public abstract class AbstractDisplay {
public abstract void open();
public abstract void print();
public abstract void close();
public final void display() {
open();
for (int i = 0; i<5; i++) {
print();
}
close();
}
}
CharDisplay : <<a>> 출력을 위한 하위 클래스
public class CharDisplay extends AbstractDisplay {
private char c;
public CharDisplay(char c) {
this.c = c;
}
@Override
public void open() {
System.out.print("<<");
}
@Override
public void print() {
System.out.print(c);
}
@Override
public void close() {
System.out.println(">>");
}
}
StringDisplay : ***abcd*** 출력을 위한 하위 클래스
public class StringDisplay extends AbstractDisplay {
private String str;
public StringDisplay(String str) {
this.str = str;
}
@Override
public void open() {
System.out.print("***");
}
@Override
public void print() {
System.out.print(str);
}
@Override
public void close() {
System.out.print("***");
}
}
Main : test 클래스
public class Main {
public static void main(String[] args) {
AbstractDisplay a = new CharDisplay('A');
a.display();
AbstractDisplay b = new StringDisplay("Hello, word");
b.display();
}
}
2. 특징
- 실행 흐름에 쓰이는 method는 final로 선언하여 하위 클래스에서는 호출하지 못하도록 하기
- 로직의 흐름은 상위 클래스에만 있기 때문에 문제가 생겼을 경우 상위 클래스만 확인하면 된다.
3. 해당 패턴을 고려해볼만한 상황
- 실행의 흐름 로직은 동일하나 상황에 따라 결과가 달라지는 경우
'디자인 패턴 > Java언어로 배우는 디자인패턴 입문 책 정리' 카테고리의 다른 글
Prototpye 패턴 (0) | 2021.01.03 |
---|---|
Singleton 패턴 (0) | 2021.01.01 |
Factory Method 패턴 (410) | 2020.12.31 |
Adapter 패턴 (0) | 2020.12.27 |
iterator 패턴 (0) | 2020.12.27 |