SSM 선언 (5) 의 템 플 릿 방법 디자인 모드

1. 템 플 릿 방법 디자인 모델
현실 생활 에서 어떤 일 을 완성 하려 면 n 여 개의 고정 적 인 절차 가 필요 하 다.예 를 들 어 '타 오 바 오 에서 쇼핑 을 한다' 는 일의 완성 은 보통 세 가지 절차 가 필요 하 다. 사이트 에 접속 하고 상품 을 고 르 며 돈 을 지불해 야 한다.그러나 사이트 에 접속 하 는 것 과 지불 하 는 두 단계 에 대해 서 는 누구나 거의 같은 조작 이다.하지만 사람마다 고 르 는 상품 이 다르다 는 점 이 다르다.소프트웨어 개발 과정 에서 도 이런 상황 이 존재 한다.어떤 종류의 어떤 방법의 실현 은 몇 가지 고정 적 인 절차 가 필요 하 다.이런 고정 적 인 절차 에서 이런 유형의 서로 다른 대상 에 대해 어떤 절차 의 실현 은 고정 적 이 고 변 하지 않 으 며 어떤 절차 의 실현 은 현저 한 차이 가 있 으 며 어떤 절차 의 실현 은 가 변 적 이 고 변 하지 않 을 수 있다.이런 상황 에 대해 서 는 템 플 릿 방법 으로 디자인 모델 프로 그래 밍 에 적합 하 다.
템 플 릿 방법 디자인 모델 의 정 의 는 작업 중의 특정한 알고리즘 프레임 워 크 를 정의 하고 일부 절 차 를 하위 클래스 로 지연 시 키 는 것 이다.템 플 릿 방법 모델 은 하위 클래스 가 하나의 알고리즘 구 조 를 바 꾸 지 않 는 전제 에서 특정한 절차 에 대해 개성 화 된 정 의 를 실현 하도록 한다.
 1.1 템 플 릿 방법 프로그램 구성
    템 플 릿 방법 디자인 모드 에 부모 클래스 가 존재 합 니 다.그 중에서 두 가지 방법 이 포함 되 어 있 습 니 다. 템 플 릿 방법 과 절차 방법 입 니 다.    템 플 릿 방법, 즉 특정한 알고리즘 을 실현 하 는 방법 절차 입 니 다.이 절 차 는 모두 호출 된 절차 방법 으로 이 루어 졌 다.
    절차 방법, 즉 템 플 릿 방법 을 완성 하 는 모든 단계 적 방법 입 니 다.모든 절차 방법 은 특정한 계산 법의 일부 기능 을 완성 한다.
    절차 방법 은 세 가지 유형 이 있 는데 그것 이 바로 추상 적 인 방법, 최종 방법 과 갈고리 방법 이다.
    추상 적 인 방법 은 하위 클래스 가 반드시 실현 해 야 하 는 방법 이 고 템 플 릿 방법 을 완성 하 는 알고리즘 절차 에서 반드시 하위 클래스 가 완성 해 야 하 는 개성 화 된 정의 이다.    최종 방법 은 하위 클래스 가 다시 쓸 수 없 는 방법 입 니 다. 템 플 릿 방법의 알고리즘 절 차 를 완성 하려 면 모든 하위 클래스 에 대해 똑 같은 절 차 를 수행 합 니 다.
    갈고리 방법 은 부류 가 기본적으로 실현 되 었 으 나 부류 도 다시 쓸 수 있 는 방법 이다.
1.2 프로그램 예시
이 예 는 '타 오 바 오 쇼핑' 이라는 일의 완성 과정 을 모 의 하 는 데 쓰 인 다.
1.2.1 부모 클래스 정의
이 부 류 는 템 플 릿 방법 을 포함 하 는 부 류 를 가리킨다.이 예 는 추상 류 다.
1.2.1 정의 하위 클래스
    신발 하위 클래스 구 매
package com.itcast.service;

/**
 *        
 * @author jack
 *
 */
public abstract class ShoppingService {
	/**
	 *     
	 */
	public void buyGoods(){
		userLogin();
		buy();
		pay();
		
	}



	/**
	 *          
	 */
	public void userLogin() {
		System.out.println("    ");
		
	}
	/**
	 *          
	 */
	public abstract void buy() ;
	
	/**
	 *     :      
	 */
	public void pay() {
		
		System.out.println("        ");
		
	}
}

의 류 구 매
package com.itcast.service;

/**
 *     
 * @author jack
 *
 */
public class ShoesShoppingService extends ShoppingService {

	@Override
	public void buy() {

		System.out.println("         ");

	}

}

1.2.3 테스트 클래스
package com.itcast.service;

/**
 *     
 * @author jack
 *
 */
public class ClothesShoppingService extends ShoppingService {

	@Override
	public void buy() {
		System.out.println("        ");

	}
	
	@Override
	public void pay(){
		System.out.println("       ");
	}

}

실행 결과:
package com.itcast.test;

import com.itcast.service.ClothesShoppingService;
import com.itcast.service.ShoesShoppingService;
import com.itcast.service.ShoppingService;
/**
 *     ---     
 * @author jack
 *
 */
public class ShoppingTest {

	public static void main(String[] args) {
		ShoppingService shoes =new ShoesShoppingService();
		ShoppingService clothes=new ClothesShoppingService();
		
		shoes.buyGoods();
		System.out.println("---------------------");
		clothes.buyGoods();
	}

}

좋은 웹페이지 즐겨찾기