거꾸로 바라본 세상
article thumbnail
반응형

Template Method Pattern







Template Method Pattern 이란?


상위클래스에 탬플릿에 해당하는 추상 메서드가 정의되어 있고, 하위 클래스에서 상위 클래스의 추상메서드를 구현하는 것. 

즉,  상위 클래스에서 처리의 뼈대를 결정하고, 하위 클래스에서 구체적인 내용을 구현하는 패턴이다.





구현



Template Method의 구현 클래스 


1. AbstarctClass(추상 클래스)

- 탬플릿 메서드를 구현하는 부분으로 추상메서드를 생성한다. 


2. ConcreteClasee(구현 클래스)

AbstarctClass에 정의되어 있는 추상메서드를 구체적으로 구현하는 역할을 한다. 








위 그림처럼 AbstractDisplay에서 추상메서드를 만들고, 하위 클래스인 StringDisplay와 CharDisplay에서 AbstractDisplay를 상속하여 추상메서드를 구현한다.



AbstractDisplay


open, print, close는 추상 메서드이기 때문에 하위 클래스에서 재사용이 가능하다.

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 클래스는 AbstractDisplay를 상속하여 추상메서드를 구현한 것을 볼 수 있다.


public class CharDisplay extends AbstractDisplay{

private char ch;

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(">>");

}


}



StringDisplay도 마찬가지


public class StringDisplay extends AbstractDisplay{

private String str;

private int width;

public StringDisplay(String str) {

this.str =str;

this.width =  str.getBytes().length;

}

@Override

public void open() {

printLine();

}

@Override

public void print() {

System.out.println("|" + str + "|");

}

@Override

public void close() {

printLine();

}

private void printLine() {

System.out.print("+");

for(int i=0; i<width; i++) {

System.out.print("-");

}

System.out.println("+");

}

}





그러면 위의 결과를 볼 수 있다.








장점



로직을 공통화 할 수 있다.

- 상위 클래스의 탬플릿 메서드에서 알고리즘이 기술되어 있으므로, 하위 클래스에서는 알고리즘을 일일이 기술할 필요가 없다.



반응형

'Software Engineering > Design Pattern' 카테고리의 다른 글

Observer Pattern(관찰자 패턴)  (0) 2023.04.20
Adapter Pattern  (0) 2016.04.25
Iterator Pattern  (0) 2016.04.21
Singleton Pattern  (0) 2016.01.31
profile

거꾸로 바라본 세상

@란지에。

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!