본문 바로가기

객체지향

[디자인패턴]Template Method Pattern

반응형

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/lecture/3175?tab=curriculum 

 

자바 디자인 패턴의 이해 - Gof Design Pattern - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

[탬플릿 메소드 패턴이란?]

공통적인 프로세스 묶어주기!

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

 

[특징]

구현하려는 알고리즘이 일정한 프로세스가있다.

구현하려는 알고리즘이 변경 가능성이 있다.

[구현법/요구사항]

알고리즘을 여러단게로 다눈다(신작게임의 접속을 구현해주세요)

나눠진 알고리즘의 단계를 메소드로 선언한다(유저가 게임접속시 고려해야함 , 보안과정,인증과정,권한과정,접속과정)

알고리즘을 수행할 템플릿 메소드를 만든다(신작게임의 접속!을 템플릿메소드패턴으로)

하위클래스에서 나눠진 메소드들을 구현한다.

 

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