728x90
Template Method Pattern
알고리즘에서 특정 step만을 수정할 때 사용한다.
subclass의 operation을 바꾸고 싶을 때 parent class에서 상속받아 재정의 한다. 하지만 이것은 전체를 다시 다 정의해야 하며 특정 부분만을 수정하는 것이 불가능하다. template method는 불변하는 코드와 변하는 코드를 나눠 불변하는 코드의 중복을 없애는 방법이다.
Solution
변하는 코드를 함수(primitive)로 바꾸어 subclass에서 상속하여 변경시킨다. 반면에 불변 코드는 상위 클래스에 그대로 둔다.
Motor
public abstract class Motor {
protected Door door;
private MotorStatus motorStatus;
public Motor(Door door) {
this.door = door;
this.motorStatus = MotorStatus.STOPPED;
}
public MotorStatus getMotorStatus() {
return motorStatus;
}
public void setMotorStatus(MotorStatus motorStatus) {
this.motorStatus = motorStatus;
}
protected abstract void moveMotor(Direction direction);
public void move(Direction direction) {
MotorStatus status = getMotorStatus();
if(status == MotorStatus.MOVING) return;
if(door.getDoorStatus() == DoorStatus.OPENED) door.closed();
// 변하는 코드
moveMotor(direction);
setMotorStatus(MotorStatus.MOVING);
}
}
상속받은 class
public class HyundaiMotor extends Motor {
public HyundaiMotor(Door door) {
super(door);
}
@Override
protected void moveMotor(Direction direction) {
System.out.println("Hyundai Motor is moving toward " + direction.toString());
}
}
Advantages
• 코드 재사용성이 증가한다.
• Inversion of Control
- template methods는 parent class의 행위를 재정의 하지 않는다.
[전체코드]
https://github.com/jKyounju/adapterPatterns/tree/master/src/BehavioralPattern/TemplateMethodPattern
[참고]
https://gmlwjd9405.github.io/2018/07/13/template-method-pattern.html
728x90
'Theory > Design Pattern' 카테고리의 다른 글
MVC Pattern (0) | 2022.05.23 |
---|---|
Visitor Pattern (0) | 2022.05.22 |
Strategy Pattern (0) | 2022.05.22 |
State Pattern (0) | 2022.05.21 |
Observer Pattern (0) | 2022.05.21 |
댓글