개발 알다가도 모르겠네요

Template Method Pattern 을 알아보자 본문

디자인패턴

Template Method Pattern 을 알아보자

이재빵 2021. 12. 15. 15:13
728x90

전체적인 알고리즘을 구현하면서 상이한 부분은  하위 클래스에서 구현할 수 있도록 해 주는 패턴

전체적인 알고리즘의 코드를 재사용하는데 유용하게 쓰입니다.

전체적으로 동일하면서 부분적으로 상이한 문장을 가지는 메소드의 코드 중복을 최소화할 때 유용합니다.

 

 

Example - 여러 회사의 모터를 지원하자

 

엘리베이터 제어 시스템에서 모터를 구동시키는 기능

-HyundaiMotor 클래스: 모터를 제어하여 엘리베이터를 이동시키는 클래스

-Door 클래스: 문을 열거나 닫는 기능을 제공하는 클래스

 

 

  • HyundaiMotor 클래스는 현대모터를 구동시킴.
  • 만약 다른 회사의 모터를 제어해야 한다면? 예를 들어 LG모터를 구동시키려면?

 

해결 전
HyundaiMotor와 LGMotor의 move 메서드

 

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) ;
}

 

 

해결책