Template Method Pattern

2020. 5. 1. 16:32디자인 패턴

Template Method Pattern이란

 Template Method Pattern이란 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메소드의 코드 중복을 최소화하는 패턴입니다. 동일하게 사용하는 기능은 부모 클래스에서 정의하면서 확장 / 변화가 필요한 부분만 자식 클래스에서 구현할 수 있도록 합니다. 구현은 아래의 게임 속 직업별 클래스를 구현한 예제를 확인해 봅니다.

전사

class Warrior {

    void prepareWeapon() {
        System.out.println("검을 닦습니다.");
    }

    void prepareArmor() {
        System.out.println("방어구를 착용합니다.");
    }
}

궁사

class Archer {

    void prepareWeapon() {
        System.out.println("활을 손질합니다.");
    }

    void prepareArmor() {
        System.out.println("방어구를 착용합니다.");
    }
}

마법사

class Wizard {

    void prepareWeapon() {
        System.out.println("지팡이를 준비합니다.");
    }

    void prepareArmor() {
        System.out.println("방어구를 착용합니다.");
    }
}

 위의 마법사, 궁사, 전사의 클래스를 살펴보면 prepareWeapon의 내용만 다르고 prepareArmor는 똑 같은 기능을 구현합니다. 템플릿 메소드 패턴은 예제와 같은 경우에 중복을 최소화하기 위해 공통 부분은 부모클래스에서 정의하고 세부 부분들은 자식 클래스에서 구현하도록 합니다. 위의 예제들에 템플릿 메소드 패턴을 적용하면 아래와 같이 만들어집니다.

캐릭터

abstract class Person {

    public abstract void prepareWeapon();

    void prepareArmor() {
        System.out.println("방어구를 착용합니다.");
    }
}

전사

class Warrior extends Person {

    @Override
    void prepareWeapon() {
        System.out.println("검을 닦습니다.");
    }
}

궁사

class Archer extends Person {

    @Override
    void prepareWeapon() {
        System.out.println("활을 손질합니다.");
    }
}

마법사

class Wizard extedns Person {

    @Override
    void prepareWeapon() {
        System.out.println("지팡이를 준비합니다.");
    }
}
728x90

'디자인 패턴' 카테고리의 다른 글

Factory Pattern  (0) 2020.05.06
Chain Of Responsibility  (0) 2020.05.02
Observer Pattern  (0) 2020.05.02
Singleton Pattern  (0) 2020.04.27
Facade Pattern  (0) 2020.04.03