Template Method Design [템플릿 메소드 디자인]
Design Object [디자인목적]
- 처리의 흐름을 상위 클래스에서 제어하고, 처리의 구체화를 하위클래스에서 정의
- 여러 클래스에서 공통되는 사항을 하나의 추상클래스[인터페이스]로 정의하여, 코드의 중복사용을 제거
Options [대안들]
- 전략패턴
Benefit [디자인 장점]
- 코드의 중복을 피한다
- 리펙토링 등에 용이
Structure & Sample Code [구조와 샘플코드]
1) TCP Connection에 따른 상태변화 처리
UML
구조
-> LoanCalculataionAlgorithm : 공통 메소드가 정의된 인터페이스. Client는 인터페이스로 처리의 분기
-> CheapLoanCalculator : 처리 클래스 1
-> ExpensiveLoanCalculator : 처리 클래스 2
Source code
- Client
public class Client {
public static void main(String[] args) {
LoanCalculationAlgorithm loanCalculationAlgorithm = new ExpensiveLoanCalculation();
System.out.println(loanCalculationAlgorithm.calculateLoan());
loanCalculationAlgorithm = new CheapLoanCalculation();
System.out.println(loanCalculationAlgorithm.calculateLoan());
}
}
- LoanCalculationAlgorithm<Interface>
public abstract class LoanCalculationAlgorithm {
public int calculateLoan(){
return (int) (getBaseAmount()*getInterest()-caclulateDiscount());
}
abstract int getBaseAmount();
abstract double getInterest();
abstract int caclulateDiscount();
}
- TCPConnectionState<Interface>
public interface TCPConnectionState {
void open();
void close();
void acknowledge() throws Exception;
}
- CheapLoanCalculation
public class CheapLoanCalculation extends LoanCalculationAlgorithm {
@Override
int getBaseAmount() {
return 100000;
}
@Override
double getInterest() {
return 3;
}
@Override
int caclulateDiscount() {
return 5000;
}
}
- ExpensiveLoanCalculation
public class ExpensiveLoanCalculation extends LoanCalculationAlgorithm {
@Override
int getBaseAmount() {
return 100000;
}
@Override
double getInterest() {
return 5.4;
}
@Override
int caclulateDiscount() {
return 100;
}
}