본문 바로가기
Java/Design Pattern

Template Method Pattern

by bloodFinger 2020. 9. 1.

알고리즘의 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴

 

 

  • 구현하려는 알고리즘이 일정한 프로세스가 있다.
  • 구현하려는 알고리즘이 변경 가능성이 있다.
  • 알고리즘은 여러 단계로 나눈다.
  • 나눠진 알고리즘의 단계를 메소드로 선언한다.
  • 알고리즘을 수행할 템플릿 메소드를 만든다.
  • 하위 클래스에서 나눠진 메소드들을 구현한다.

 

 

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