[디자인패턴] Template (행동패턴)

유존돌돌이·2022년 2월 28일
0

공부

목록 보기
15/22

Template 패턴은 어떤 공통의 일이 있으나 그 일이 세부적으로 분류에 따라 다르게 진행이 될 때, Template으로 큰 메서드를 만들고 상속받는 클래스에서 특성에 맞는 프로세스로 처리를 하는 디자인 패턴이다.

아래 예는 스타크래프트의 일꾼의 공통 일인 건물 짓기를 Template으로 하고 각 종족에 맞게 처리되는 예이다.

대표적인 예로는 Map -> HashMap, TreeMap

건물 짓기 공통 Template

public abstract class Build {
	// final로 재정의 금지
	public final void Building(String building) {
		checkArea();
		startBuild();
		endBuild();
		System.out.println("건물 "+building+" 완료!");
	}
	
	public void checkArea() {
		System.out.println("지을 수 있는 지형인지 확인");
	}
	
	public abstract void startBuild();
	public abstract void endBuild();
	
}

Zerg

public class Zerg extends Build {
	private String name = "Drone"; 
	
	@Override
	public void endBuild() {
		System.out.println("["+name+"] 파괴! 희생되었습니다.");
	}
	@Override
	public void startBuild() {
		System.out.println("["+name+"] 희생하여 건물을 짓고 있습니다.");
	}
}

Protoss

public class Protoss extends Build {
	
	private String name = "Probe"; 
			
	@Override
	public void endBuild() {
		System.out.println("["+name+"] 이미 다른일을 하고 있습니다.");
	}
	@Override
	public void startBuild() {
		System.out.println("["+name+"] 바로 다른 일을 할 수 있습니다.");
	}
}

Terran

public class Terran extends Build {
	private String name = "SCV"; 
	
	@Override
	public void endBuild() {
		System.out.println("["+name+"] 일이 끝나 다른 일을 할 수 있습니다.");
	}
	@Override
	public void startBuild() {
		System.out.println("["+name+"] 열심히 건물을 짓기 시작합니다.");
	}
}

실행부

public class MyProgram {
	public static void main(String[] args) {
		Build worker1 = new Protoss();
		Build worker2 = new Zerg();
		Build worker3 = new Terran();
		
		worker1.Building("게이트웨이");
		System.out.println("================");
		worker2.Building("스포닝풀");
		System.out.println("================");
		worker3.Building("배럭");
	}
}

결과

지을 수 있는 지형인지 확인
[Probe] 바로 다른 일을 할 수 있습니다.
[Probe] 이미 다른일을 하고 있습니다.
건물 게이트웨이 완료!
================
지을 수 있는 지형인지 확인
[Drone] 희생하여 건물을 짓고 있습니다.
[Drone] 파괴! 희생되었습니다.
건물 스포닝풀 완료!
================
지을 수 있는 지형인지 확인
[SCV] 열심히 건물을 짓기 시작합니다.
[SCV] 일이 끝나 다른 일을 할 수 있습니다.
건물 배럭 완료!

정리

큰 일이 정해져 있는데 그걸 나랑 너랑 하는 방식이 달라. 일단 크게 계획을 세우고 알아서 하자.

0개의 댓글