POOPOO: 배변 일기 앱
SMALL
행동패턴 목록
- 책임연쇄 패턴 (Chan of Responsibility Pattern)
- 커맨드 패턴 (Command Pattern)
- 해석자 패턴 (Interpreter Pattern)
- 반복자 패턴 (Iterator Pattern)
- 중재자 패턴 (Mediator Pattern)
- 메멘토 패턴 (Memento Pattern)
- 관찰자 패턴 (Observer Pattern)
- 상태 패턴 (State Pattern)
- 전략 패턴 (Strategy Pattern)
- 템플릿 패턴 (Template Pattern)
여기서 초점을 둘 부분은 final 로 만들어둔 변경 불가능한 프로세스 함수인 play() 이다. 고정되어있는 순서로 프로세스를 적용하려면 아래와 같이 final로 지정해 두는 것이 훨씬 효과적일 것 같다. 또한 이런 템플릿을 만들어 사용하는 경우에는 너무 구체적으로 만드는 경우에는 같이 개발하는 사람이 힘들 수 있기 때문에 체계적인 템플릿 작성이 필요하다.
장점
- 코드 재사용을 위한 매우 일반적인 기술이다. 즉 코드를 재사용할 수 있는 것이 장점이다.
사용시기
- 중복을 피하여 서브클래스간의 공통 동작을 단일 공통 클래스로 이동해야 할 때 사용됩니다.
UML
Template Class : Game
public abstract class Game {
abstract void initialize();
abstract void start();
abstract void end();
public final void play(){
initialize();
start();
end();
}
}
Template extends Class : Chess, Soccer
public class Chess extends Game {
@Override
public void initialize() {
System.out.println("Chess Game Initialized! Start playing.");
}
@Override
public void start() {
System.out.println("Game Started. Welcome to in the chess game!");
}
@Override
public void end() {
System.out.println("Game Finished!");
}
}
public class Soccer extends Game {
@Override
public void initialize() {
System.out.println("Soccer Game Initialized! Start playing.");
}
@Override
public void start() {
System.out.println("Game Started. Welcome to in the Soccer game!");
}
@Override
public void end() {
System.out.println("Game Finished!");
}
}
Operation Class : TemplatePatternDemo
public class TemplatePatternDemo {
public static void main(String[] args) {
Class c = Class.forName("com.study.template.Soccer");
Game game=(Game) c.newInstance();
game.play();
}
}
출처 : https://www.javatpoint.com/
LIST