알고리즘의 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴
- 구현하려는 알고리즘이 일정한 프로세스가 있다.
- 구현하려는 알고리즘이 변경 가능성이 있다.
- 알고리즘은 여러 단계로 나눈다.
- 나눠진 알고리즘의 단계를 메소드로 선언한다.
- 알고리즘을 수행할 템플릿 메소드를 만든다.
- 하위 클래스에서 나눠진 메소드들을 구현한다.
public abstarct class AbstGameConnectHelper{
protected abstarct String doSecurity(String string);
protected abstarct boolean authentication(String id , String password);
protected abstarct int authorization(String userName);
protected abstarct String connection(String info);
//템플릿 메소드
public requestConnection(String str) {
//보안 작업
String decodedInfo = doSecurity(str);
//반환된 것을 가지고 아이디 , 암호를 할당한다.
String id = "";
String password = "";
if(!authentication(id , password)){
throw new Error("아이디 암호 불일치");
}
String userName = "userName";
int i = authorization(userName);
switch(i) {
case 0:
System.out.println("게임 매니저");
break;
case 1:
System.out.println("유료 회원");
break;
case 2:
System.out.println("무료 회원");
break;
case 3:
System.out.println("권한 없음");
break;
}
return connection(decodedInfo);
}
}
public class DefaultGameConnectHelper extends AbstGameConnectHelper {
@Overide
protected String doSecurity(String string){
System.out.println("디코드");
return string;
}
@Overide
protected boolean authentication(String id , String password){
System.out.println("아이디 / 비밀번호 확인 과정 ");
}
@Overide
protected int authorization(String userName){
System.out.println("권한 확인");
return 0;
}
@Overide
protected String connection(String info){
System.out.println("마지막 접속 단계");
return null;
}
}
public class Main {
public static void main(String[] args) {
AbstGameConnectHelper helper = new DefualtGameConnectionHelper();
helper.requestConnection("아이디 함호 등 접속 정보")
}
}
'Java > Design Pattern' 카테고리의 다른 글
어댑트 패턴(Adapter Pattern) (0) | 2020.08.25 |
---|---|
전략 패턴(Strategy Pattern) (0) | 2020.08.23 |