우유 생산 문제
다음과 같이 우유를 생산 프로그래밍 :
- 선정 과정에서 우유의 생산 -> 성분 추가 -> 흡수 -> 두유은으로 나누어
- 다른 재료를 추가하면 우유의 다른 맛을 만들 수 있습니다
- 선택하고, 동일 두유 각각의 맛을 만들려면 다음 단계를 깰 두유에 스며
- 템플릿 메소드 패턴이 완료를 사용하십시오 (참고 : 템플릿 메소드 패턴은 비교적 간단하기 때문에, 그것은 직접 사용하므로, 더 이상 야기가 템플릿 메소드 패턴 전통적인 방법을 사용,이 프로그램을 생각하기 쉽다 없음)
템플릿 메소드 패턴 기본 소개
기본 소개
- 메소드 패턴 템플릿 (템플릿 메소드 패턴)라고도 주형 패턴 (템플릿 패턴), Z는 방법이 템플릿을 실행하는 추상 클래스 정의에 관한 것이다. 그것의 서브 클래스를 달성하기 위해 필요에 따라 메소드를 오버라이드 (override) 할 수 있지만, 호출은 추상 클래스에 정의됩니다.
- 간략하게는, 템플릿 방식 골격 모델 알고리즘 서브 일부 단계를 연기하면서, 서브 클래스가 재정의 할 수있는 알고리즘의 특정 단계에, 이러한 구성 알고리즘을 변경할 수 있으며, 하나 개의 연산으로 정의
- 디자인 패턴이 유형의 행동 패턴을 속한다.
템플릿 메소드 패턴 클래스 다이어그램 원리
원리 16.3.1 템플릿 메소드 패턴의 클래스 다이어그램
원칙의 클래스 다이어그램 설명 - 그 (템플릿 메소드 패턴의 역할과 책임)
- 추상 클래스 AbstractClass, 클래스 구현 템플릿 방법 (템플릿), 알고리즘을 정의 골격은, 구상 서브 클래스가 다른 방법을 추상적 operationr2,3,4를 구현해야
- ConcreteClass는 특성의 하위 클래스에서 알고리즘의 단계를 완료, 추상 메소드의 operationr2,3,4를 구현
템플릿 메소드 패턴은 우유 생산의 문제를 해결하기 위해
-
응용 프로그램의 예는 필요
다음과 같이 우유 생산의 프로그래밍 :
우유 흐름 선택의 생산 -> 성분 추가 -> 몸을 담글 -> 두유 다른 성분을 추가로 깨진, 우유의 다른 맛 생산할 수있는
선택, 침수 및 방전 모든 맛 우유 생산을 위해 여러 단계로 나누어 두유있는 같은 (팥, 땅콩, 우유 ...) -
아이디어 및 분석 방식 (도 클래스)
후크 방법 템플릿 메소드 패턴
- 경우는 서브 클래스가 호출되는, 그것을 커버하지 않는 될 수 있으므로 부모 클래스 템플릿 메소드 패턴에서, 우리는 기본적으로 아무것도하지 않는 방법을 정의 할 수 있습니다 "후크."
- 또는 위의 예와 우유는, 예를 들어, 우리는 또한, 어떤 재료를 추가 템플릿 방식의 전면을 변환하는 후크 방법을 사용하지 않는, 순수한 우유를 만들고 싶어 설명하기 않는다
- 코드 보여줍니다
//抽象类,表示豆浆
public abstract class SoyaMilk {
//模板方法, make , 模板方法可以做成final , 不让子类去覆盖.
final void make() {
select();
if(customerWantCondiments()) {
addCondiments();
}
soak();
beat();
}
//选材料
void select() {
System.out.println("第一步:选择好的新鲜黄豆 ");
}
//添加不同的配料, 抽象方法, 子类具体实现
abstract void addCondiments();
//浸泡
void soak() {
System.out.println("第三步, 黄豆和配料开始浸泡, 需要3小时 ");
}
void beat() {
System.out.println("第四步:黄豆和配料放到豆浆机去打碎 ");
}
//钩子方法,决定是否需要添加配料
boolean customerWantCondiments() {
return true;
}
}
소스 스프링 프레임 워크 응용 프로그램에서 16.6 템플릿 메소드 패턴 분석
- 봄 IOC 컨테이너 템플릿 메소드 패턴을 초기화하기 위해 적용 할 때
- 분석 문자 코드 분석 + + 클래스도 설명했다.
- 소스 코드 (지침 계층 구조)에 대한 클래스 다이어그램
노트 및 템플릿 메소드 패턴의 세부 사항
- 기본적인 아이디어는 다음과 같습니다 알고리즘은 단 한 곳에서, 즉, 상위 클래스에 수정이 용이 존재한다. 필요가 알고리즘을 수정하면, 한 부모 클래스의 방법은 특정 단계를 템플릿을 수정하거나 이미 구현에 관해서는, 서브 클래스는 이러한 변경 사항을 상속합니다
- 코드 재사용을 최대화합니다. 템플릿 메소드 부모 클래스와 단계의 서브 클래스 일부는 상속을 사용하여 직접 실현 될 것입니다.
- 두 통합 알고리즘은 또한 상당한 유연성을 제공한다. 템플릿 상위 클래스의 메소드는 서브 클래스에 의해 달성되는 단계들을 제공하면서 알고리즘 구조가 변하지 않도록한다.
- 모델의 부적합성은 : 다른 구현 예들 각각은 시스템이 더 크게 만들고, 클래스의 수를 증가의 결과 달성 서브 클래스를 필요
- 일반 템플릿 메소드는 서브 클래스가 템플릿 메소드를 오버라이드 (override) 방지하기 위해, 최종 키워드와 결합됩니다.
- 템플릿 메소드 패턴의 사용 시나리오 : 프로세스에 완료하는 프로세스는 일련의 단계를 수행 할 때, 이러한 일련의 단계는 기본적으로 동일하지만, 각 단계를 구현하는 경우, 일반적으로 템플릿 메소드 패턴 처리로 간주됩니다 다를 수 있습니다