TemplateMethod pattern
This commit is contained in:
13
design-pattern/src/TemplateMethod/Main.java
Normal file
13
design-pattern/src/TemplateMethod/Main.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package TemplateMethod;
|
||||
|
||||
import TemplateMethod.connection.AbstGameConnectHelper;
|
||||
import TemplateMethod.connection.DefaultGameConnectHelper;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
AbstGameConnectHelper helper = new DefaultGameConnectHelper();
|
||||
|
||||
helper.requestConnection("아이디 암호 등 접속 정보");
|
||||
}
|
||||
}
|
||||
32
design-pattern/src/TemplateMethod/Template Method
Normal file
32
design-pattern/src/TemplateMethod/Template Method
Normal file
@@ -0,0 +1,32 @@
|
||||
Template Method
|
||||
- 공통적인 프로세스 묶어주기
|
||||
- 알고리즘의 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의
|
||||
변경없이 알고리즘을 재정의 하는 패턴
|
||||
|
||||
When?
|
||||
- 구현하려는 알고리즘이 일정한 프로세스가 있다.
|
||||
- 구현하려는 알고리즘이 변경 가능성이 있다.
|
||||
|
||||
How?
|
||||
- 알고리즘을 여러 단계로 나눈다.
|
||||
- 나눠진 알고리즘의 단계를 메소드로 선언한다.
|
||||
- 알고리즘을 수행할 템플릿 메소드를 만든다.
|
||||
- 하위 클래스에서 나눠진 메소드들을 구현한다.
|
||||
|
||||
요구사항
|
||||
- 게임의 접속을 구현
|
||||
- requestConnection(String str) : String
|
||||
- 유저가 게임 접속시 다음을 고려
|
||||
- 보안 과정 : 보안 관련 부분을 처리합니다.
|
||||
- doSecurity(String string) : String
|
||||
- 인증 과정 : username 과 password 가 일치하는지 확인합니다.
|
||||
- authentication(String id, String password) : boolean
|
||||
- 권한 과정 : 접속자가 유료 회원인지 무료회원인지 게임 마스터인지 확인합니다.
|
||||
- authorization(String userName) : int
|
||||
- 접속 과정 : 접속자에게 커넥션을 정보를 넘겨 줍니다.
|
||||
- connection(String info) : String
|
||||
|
||||
추가사항이 생긴다면
|
||||
- 강화된 방식으로 코드 변경
|
||||
- 밤 10시 이후 접속 제한
|
||||
-> 구현부를 수정하면 된다.
|
||||
@@ -0,0 +1,47 @@
|
||||
package TemplateMethod.connection;
|
||||
|
||||
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 = "abc";
|
||||
String password = "1234";
|
||||
|
||||
if(!authentication(id, password)) {
|
||||
throw new Error("아이디 암호 불일치");
|
||||
}
|
||||
|
||||
String userName = "userName";
|
||||
int authorization = authorization(userName);
|
||||
switch (authorization) {
|
||||
case -1:
|
||||
throw new Error("셧다운");
|
||||
case 0: // 게임 메니저
|
||||
System.out.println("게임 매니저");
|
||||
break;
|
||||
case 1: // 유료회원
|
||||
System.out.println("유료회원");
|
||||
break;
|
||||
case 2: // 무료회원
|
||||
System.out.println("무료회원");
|
||||
break;
|
||||
case 3: // 권한없음
|
||||
System.out.println("권한없음");
|
||||
break;
|
||||
default: // 기타
|
||||
System.out.println("기타");
|
||||
break;
|
||||
}
|
||||
|
||||
return connection(decodedInfo);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package TemplateMethod.connection;
|
||||
|
||||
public class DefaultGameConnectHelper extends AbstGameConnectHelper{
|
||||
@Override
|
||||
protected String doSecurity(String string) {
|
||||
// System.out.println("decode");
|
||||
System.out.println("강화된 알고리즘을 이용한 디코드");
|
||||
return string;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean authentication(String id, String password) {
|
||||
System.out.println("아이디/암호 확인 과정");
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int authorization(String userName) {
|
||||
System.out.println("권한 확인");
|
||||
// 서버에서 유저이름으로 유저의 나이를 확인 후 시간 확인
|
||||
// 성인이 아니고 10시가 지났다면 권한이 없는 것으로 판단하는 알고리즘을 구현
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String connection(String info) {
|
||||
System.out.println("마지막 접속 단계");
|
||||
return info;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user