JAVA

[Java] Template Method Pattern

lakelight 2022. 7. 28. 15:21
728x90
반응형

Template Method Pattern

전체 작업의 시나리오를 정의하여 하위 클래스에서 그 시나리오가 바뀌지 않도록 할 수 있습니다. 즉 전체 일을 수행하는 구조는 바뀌지 않고 특정 단계에서 수행하는 작업은 하위 클래스에서 정의할 수 있도록 합니다.

동일한 기능을 상위 클래스에서 정의하면서 확장/ 변화가 필요한 부분만 서브 클래스에서 구현하도록 할 수 있다는 장점이 있습니다.

 

Template Method Patter 구현

[Computer Class]

package Java.templateMethodEx;

public abstract class Computer {

    //하위 클래스에서 재정의 해야할 추상 메서드
    public abstract void setting();
    public abstract void clean();

    //하위 클래스에서 재정의 하지 않아도 되는 메서드
    public void turnOn(){
        System.out.println("시스템 시작");
    };
    public void turnOff(){
        System.out.println("시스템 종료");
    };

    //<템플릿 메서드 패턴>
    // 이 시나리오는 변하면 안됩니다.
    // 그렇기 때문에 final키워드를 적용해서
    // 하위 클래스에서 재정의할 수 없도록 하였습니다.
    final public void operation(){
        setting();
        turnOn();
        turnOff();
        clean();
    }
}

 

[Desktop Class]

package Java.templateMethodEx;

public class Desktop extends Computer{
    @Override
    public void setting() {
        System.out.println("본체에 모니터, 키보드, 마우스 연결");
        System.out.println("전원 콘센트 연결");
    }

    @Override
    public void clean() {
        System.out.println("본체에 모니터, 키보드, 마우스 연결 해제");
        System.out.println("전원 콘센트 뽑기");
    }
}

 

[Laptop Class]

package Java.templateMethodEx;

public class Laptop extends Computer{
    @Override
    public void setting() {
        System.out.println("충전기 연결");
        System.out.println("노트북 열기");
    }

    @Override
    public void clean() {
        System.out.println("충전기 연결해제");
        System.out.println("노트북 닫기");
    }
}

 

[Main]

package Java.templateMethodEx;

public class Main {
    public static void main(String[] args) {
        Computer desktop = new Desktop();
        Computer laptop = new Laptop();

        System.out.println("############################");
        System.out.println("desktop");
        System.out.println("############################");
        desktop.operation();
        System.out.println("############################");
        System.out.println("laptop");
        System.out.println("############################");
        laptop.operation();

    }
}

 

결과

############################
desktop
############################
본체에 모니터, 키보드, 마우스 연결
전원 콘센트 연결
시스템 시작
시스템 종료
본체에 모니터, 키보드, 마우스 연결 해제
전원 콘센트 뽑기
############################
laptop
############################
충전기 연결
노트북 열기
시스템 시작
시스템 종료
충전기 연결해제
노트북 닫기

 

728x90
반응형