[java] 3강 템플릿 메소드 패턴(Template Method Pattern)
https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4#
자바 디자인 패턴의 이해 - Gof Design Pattern - 인프런
자바 디자인 패턴 이해하기 강좌 입니다. 여러가지 디자인 패턴들을 알아보며 디자인 패턴에 대한 이해도를 높이도록 도와줍니다. Gof Design Pattern을 자바 언어로 설명한 강의. 의미 있고 쉬운 예제를 준비하려고 노력했습니다. 중급 프로그래밍 언어 Java MVC 온라인 강의 자바 디자인 패턴
www.inflearn.com
사전적 의미의 템플릿이란?
무엇인가를 만들 때 안내 역할을 하는 데 사용되는 틀, 모형을 의미한다.
템플릿 메서드 패턴이란?
알고리즘의 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의 변경 없이
알고리즘을 재정의 하는 패턴을 말합니다.
어떨 때 사용하나?
1. 구현하는 알고리즘이 일정한 단계가 있다
2. 구현하려는 알고리즘이 변경 가능성이 있다.
단계
1. 알고리즘을 여러 단계로 나눈다.
2. 나눠진 알고리즘의 단계로 메소드를 선언한다.
3. 알고리즘을 수행할 템플릿 메소드를 만든다.
4. 하위 클래스에서 나눠진 메소드를 구현한다.
이렇게 하면 하위 클래스에서 일부분의 단계를 구현할 수 있으면서 알고리즘의 전체 구조는 유지된다.
템플릿 메소드 패턴을 활용한 코드
public abstract class AbstGameConnectHelper {
//보안
protected abstract String doSecurity(String string);
// 인증
protected abstract boolean authentication(String id, String password);
// 권한
protected abstract int authorization(String userName);
// 접속
protected abstract String connection(String info);
// 템플릿 메소드
public String requestConnection(String encodedInfo) {
// 보안 작업 -> 암호화 된 문자열을 복호화
String decodedInfo = doSecurity(encodedInfo);
String id = "aaa";
String password = "bbb";
// 반환된 것을 가지고 아이디, 암호를 할당한다.
if (!authentication(id, password)) {
throw new Error("아이디 암호 불일치");
}
String userName = "";
int i = authorization(userName);
switch (i) {
case -1 :
throw new Error("10시 이후 셧다운");
case 0 :
System.out.println("게임메니저");
break;
case 1 : // 유로 회원
break;
case 2 : // 무료 회원
break;
case 3 : //권한 없음
break;
default : // 기타사항
break;
}
return connection(decodedInfo);
}
}
public class DefaultGameConnectHelper extends AbstGameConnectHelper{
@Override
protected String doSecurity(String string) {
return string;
}
@Override
protected boolean authentication(String id, String password) {
System.out.println("아이디 / 암호 확인 db에서");
return true; //일단 무조건 맞다고 넘김
}
@Override
protected int authorization(String userName) {
System.out.println("권한 확인");
// 서버에서 유저이름 유저의 나이를 알 수 있다.
// 나이를 확인하고 지금 시간 확인해서 비교 후 => 성인이 아니고 10시가 지났다면 if문을 통해
// 권한이 없는 것으로 한다.
return 0;
}
@Override
protected String connection(String info) {
System.out.println("마지막 접속단계!");
return info;
}
}
main.java
import designpattern.chapter3.dp.AbstGameConnectHelper;
import designpattern.chapter3.dp.DefaultGameConnectHelper;
public class Main {
public static void main(String[] args) {
AbstGameConnectHelper helper = new DefaultGameConnectHelper();
helper.requestConnection("아이디 암호 등 접속 접보");
}
}
참고
https://jusungpark.tistory.com/24
디자인패턴 - 템플릿 메소드 패턴 (template method pattern)
템플릿 메소드 패턴 (template method pattern) 메소드에서 알고리즘의 골격을 정의한다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유..
jusungpark.tistory.com
소스코드
https://github.com/garam-park/java-designpattern
garam-park/java-designpattern
Java Design Patter Example for Coders in korean. Contribute to garam-park/java-designpattern development by creating an account on GitHub.
github.com