디자인패턴
Template Method Pattern 을 알아보자
이재빵
2021. 12. 15. 15:13
728x90
전체적인 알고리즘을 구현하면서 상이한 부분은 하위 클래스에서 구현할 수 있도록 해 주는 패턴
전체적인 알고리즘의 코드를 재사용하는데 유용하게 쓰입니다.
전체적으로 동일하면서 부분적으로 상이한 문장을 가지는 메소드의 코드 중복을 최소화할 때 유용합니다.
Example - 여러 회사의 모터를 지원하자
엘리베이터 제어 시스템에서 모터를 구동시키는 기능
-HyundaiMotor 클래스: 모터를 제어하여 엘리베이터를 이동시키는 클래스
-Door 클래스: 문을 열거나 닫는 기능을 제공하는 클래스
- HyundaiMotor 클래스는 현대모터를 구동시킴.
- 만약 다른 회사의 모터를 제어해야 한다면? 예를 들어 LG모터를 구동시키려면?
move 메서드에서 공통적인 부분을 상위 클래스 Motor로 이동.
public abstract class Motor {
private Door door ;
private MotorStatus motorStatus ;
public Motor(Door door) {
this.door = door ;
motorStatus = MotorStatus.STOPPED ;
}
public MotorStatus getMotorStatus() { return motorStatus; }
private void setMotorStatus(MotorStatus motorStatus) {
this.motorStatus = motorStatus;
}
public void move(Direction direction) { // LGMotor와 HyundaiMotor의 move에서 공통만을 가짐
MotorStatus motorStatus = getMotorStatus() ;
if ( motorStatus == MotorStatus.MOVING ) return ;
DoorStatus doorStatus = door.getDoorStatus() ;
if ( doorStatus == DoorStatus.OPENED ) door.close() ;
moveMotor(direction) ; // 하위 클래스에서 override됨
setMotorStatus(MotorStatus.MOVING) ;
}
protected abstract void moveMotor(Direction direction) ;
}