Template Method Design [템플릿 메소드 디자인]

  1. Design Object [디자인목적]

    1. 처리의 흐름을 상위 클래스에서 제어하고, 처리의 구체화를 하위클래스에서 정의
    2. 여러 클래스에서 공통되는 사항을 하나의 추상클래스[인터페이스]로 정의하여, 코드의 중복사용을 제거
  2. Options [대안들]

    1. 전략패턴
  3. Benefit [디자인 장점]

    1. 코드의 중복을 피한다
    2. 리펙토링 등에 용이
  4. Structure & Sample Code [구조와 샘플코드]

    1) TCP Connection에 따른 상태변화 처리

    1. UML

    2. 구조
      -> LoanCalculataionAlgorithm : 공통 메소드가 정의된 인터페이스. Client는 인터페이스로 처리의 분기
      -> CheapLoanCalculator : 처리 클래스 1
      -> ExpensiveLoanCalculator : 처리 클래스 2

  5. Source code

    1. 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;
    }
}

results matching ""

    No results matching ""