[디자인 패턴] Template Method 패턴
이멀젼씨
·2020. 1. 19. 18:07
- 정의
상위 클래스에서 처리 흐름을 제어하고, 하위 클래스에서는 상위 클래스의 처리 흐름(각각의 기능)에 해당하는 메소드를 재정의 하는 패턴이다
- UML
1. GameConnectHelper클래스에 연결을 요청하는 requestConnection메소드와 보안담당 doSecurity, 인증담당 authentication, 권한담당 authorization, 연결담당 connection메소드를 정의한다. requestConnection은 나머지 메소드를 한꺼번에 실행하여 일련의 로그인 과정을 처리해주는 메소드이다. 나머지 메소드들은 재정의가 가능한 메소드이다
2. DefaultGameConnectHelper클래스는 GameConnectHelper클래스를 상속받아 보안담당 doSecurity, 인증담당 authentication, 권한담당 authorization, 연결담당 connection메소드를 재정의 하였다
3. Main클래스에서 인증을 실행한다
- 코드
GameConnectHelper class
public abstract class GameConnectHelper {
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) {
// 보안(decoding)
String decodedInfo = doSecurity(encodedInfo);
// 반환된 것을 갖고 아이디와 암호 할당
String id = "aaa";
String password = "bbb";
// 인증
if(authentication(id, password)) {
throw new Error("id & pw not matched");
}
String userName = "userName";
int i = authorization(userName);
switch(i) {
case -1:
throw new Error("Shut Down");
case 0: // Game Manager
System.out.println("Game Manager");
break;
case 1: // Paid Member
System.out.println("Paid Member");
break;
case 2: // Free Member
System.out.println("Free Member");
break;
case 3: // No Permission
System.out.println("No permission");
break;
default: // Etc
break;
}
return connection(decodedInfo);
}
}
DefaultGameConnectHelper class
public class DefaultGameConnectHelper extends GameConnectHelper{
@Override
protected String doSecurity(String string) {
// Before
// System.out.println("Decoding");
// After
System.out.println("Enhanced decoding");
return string;
}
@Override
protected boolean authentication(String id, String password) {
System.out.println("Check id & pw");
return false;
}
@Override
protected int authorization(String userName) {
System.out.println("Check authorization");
// 유저이름을 통해 유저의 나이를 알 수 있음
// 성인이 아니고 10시가 지났다면
int age = 20;
if(age<20) return -1;
else return 1;
}
@Override
protected String connection(String info) {
System.out.println("Last access phase");
return null;
}
}
Main class
public class Main {
public static void main(String[] args) {
GameConnectHelper helper = new DefaultGameConnectHelper();
helper.requestConnection("login Info");
}
}
- 설명
템플릿메소드패턴을 위와 같이 간단하게 볼 수 있따
일련의 메소드를 한꺼번에 실행할 수 있는 메소드를 하나 정의하고(이 메소드는 변경되어선 안된다),
재정의가 가능한 메소드들을 만들어서 요구사항에 따라 해당 과정에서 수행되는 일을 변경할 수 있다
'디자인패턴' 카테고리의 다른 글
[디자인 패턴] ProtoType 패턴 (0) | 2020.02.11 |
---|---|
[디자인 패턴] Singleton 패턴 (0) | 2020.02.10 |
[디자인 패턴] Factory Method 패턴 (0) | 2020.01.20 |
[디자인 패턴] Adapter 패턴 (0) | 2020.01.15 |
[디자인 패턴] Strategy 패턴 (0) | 2020.01.14 |