반응형
[탬플릿 메소드 패턴이란?]
공통적인 프로세스 묶어주기!
알고리즘 구조를 메소드에 정의하고 하위클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의하는 패턴
[특징]
구현하려는 알고리즘이 일정한 프로세스가있다.
구현하려는 알고리즘이 변경 가능성이 있다.
[구현법/요구사항]
알고리즘을 여러단게로 다눈다(신작게임의 접속을 구현해주세요)
나눠진 알고리즘의 단계를 메소드로 선언한다(유저가 게임접속시 고려해야함 , 보안과정,인증과정,권한과정,접속과정)
알고리즘을 수행할 템플릿 메소드를 만든다(신작게임의 접속!을 템플릿메소드패턴으로)
하위클래스에서 나눠진 메소드들을 구현한다.
public class Main {
public static void main(String[] args) {
AbstGameConnectHelper helper= new DefaultGameConnectHelper();
helper.requestConnction("아이디등 암호 접속 정보");
}
}
public abstract class AbstGameConnectHelper {
//알고리즘의 단계이기때문에 외부에 노출이 되면 안된다!
//하위클래스에서 재정의 시 private으로 해서 노출을 막자
abstract String doSecurity(String s);
abstract boolean authentication(String id,String password);
abstract int authorization(String username);
abstract String connection(String info);
//템플릿메소드 4가지 알고리즘 단계를 적기
public String requestConnction(String encodeInfo){
//보완작업 :암호화 된 문자열을 디코드한다.복호화환다
String decodeInfo= doSecurity(encodeInfo);
//반환된거가지고 아이디, 암호를 할당한다
//밑에는 decodeInfo 예시로 결과가 나왔다하자..
String id="aaa";
String password="bb";
//인증이 되었냐
if (!authentication(id, password)) {
throw new Error("암호불일치");
}
String username = "username";
int i=authorization(username);
switch (i){
case -1:
throw new Error("셧다운");
case 0: //게임매니져
break;
case 1: //유로회원
break;
case 2: //무료회원
break;
case 3: //권한없음
break;
default: //기타상황
break;
}
return connection(decodeInfo);
}
}
public class DefaultGameConnectHelper extends AbstGameConnectHelper {
//구현단계 : 하위클래스에서 4가지 단계를 구체화
//요구사항이 들어오면 여기에 강화된 알고리즘을 추가할수 있다.
@Override
String doSecurity(String s) {
System.out.println(" 디코드");
return s;
}
@Override
boolean authentication(String id, String password) {
System.out.println("아이디 암호 확인과정");
return true;
}
@Override
int authorization(String username) {
System.out.println("권한 확인");
//서버에서 유저이름의 아이디를 확인해서 "성인만 접속가능하도록" 요구사항이 들어온다면 여기서 구체화 시킬수있음.
return 0;
}
@Override
String connection(String info) {
System.out.println("마지막 접속단계");
return info;
}
}
장점: 알고리즘의 구조를 메소드에 정의하고 하위클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의하는 패턴
반응형
'객체지향' 카테고리의 다른 글
[디자인 패턴] Decorator Pattern (0) | 2022.04.10 |
---|---|
[디자인패턴] Composite pattern (0) | 2022.03.27 |
[디자인 패턴]AdapterPattern (0) | 2022.03.27 |
[디자인패턴]StrategyPattern (0) | 2022.03.27 |
Exception (0) | 2021.06.01 |