소개하다
템플릿 메소드는 작동 알고리즘의 골격을 정의하고 일부 단계를 서브 클래스로 지연시킵니다. 템플릿 메소드는 서브 클래스가 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 특정 단계를 재정의 할 수 있도록합니다.
템플릿 메소드는 코드 재사용의 기본 기술로 클래스 라이브러리에서 공개 행동을 추출하기 때문에 클래스 라이브러리에서 특히 중요합니다. 템플릿 메소드는 전설적인 "할리우드 법"인 리버스 제어 구조로 이어집니다. 구체적인 표현은 객체 지향 프로그래밍 언어의 추상 클래스 (및 추상적 인 방법)이며 추상 클래스 (및 추상적 인 방법)를 상속하는 서브 클래스입니다.
텍스트
예를 들어, 차와 커피를 만드는 것은 끓는 물, 양조, 컵에 쏟아지거나 작은 재료를 추가하는 것 등과 같은 계단을 갖습니다. 그러나 각 음료를 양조하는 방법과 추가 된 작은 재료는 다르므로 템플릿 방법을 사용 하여이 주요 단계를 달성 할 수 있습니다.
먼저 추상 단계를 정의합니다.
코드 사본은 다음과 같습니다.
var caffeinebeverage = function () {
};
Caffeinebeverage.prototype.prepareRecipe = function () {
this.boilwater ();
this.brew ();
this.pouroncup ();
if (this.customerWantsCondiments ()) {
// 작은 재료를 추가 할 수 있다면 추가하십시오
this.addcondiments ();
}
};
caffeinebeverage.prototype.boilwater = function () {
Console.log ( "물을 끓여!");
};
caffeinebeverage.prototype.pouroncup = function () {
Console.log ( "음료를 컵에 넣으십시오!");
};
caffeinebeverage.prototype.brew = function () {
새 오류를 던지십시오 ( "이 방법을 다시 작성해야합니다!");
};
caffeinebeverage.prototype.addcondiments = function () {
새 오류를 던지십시오 ( "이 방법을 다시 작성해야합니다!");
};
// 기본적으로 작은 재료를 추가합니다
Caffeinebeverage.prototype.CustomerWantsCondiments = function () {
진실을 반환하십시오.
};
이 기능은 프로토 타입의 모든 기본 단계와 주요 단계를 확장합니다. 양조 및 작은 성분을 추가하는 것은 구현되지 않으며 구현할 특정 음료에 해당하는 기능에 의해 사용됩니다. 또한 작은 성분을 추가할지 여부 (CustomerWantsCondiments)는 기본적으로 TRUE를 반환합니다. 이 값은 하위 기능을 다시 작성할 때 다시 작성할 수 있습니다.
다음 두 가지 기능은 커피를 양조하고 차를 양조하기위한 해당 기능입니다.
코드 사본은 다음과 같습니다.
// 커피를 만듭니다
var coffee = function () {
caffeinebeverage.apply (this);
};
Coffee.prototype = 새로운 Caffeinebeverage ();
Coffee.prototype.brew = function () {
Console.log ( "커피 메이커에서 커피를 붓고 싶어요!");
};
Coffee.prototype.addcondiments = function () {
Console.log ( "설탕과 우유 추가");
};
Coffee.prototype.CustomerWantsCondiments = function () {
반환 확인 ( "설탕과 우유를 첨가 하시겠습니까?");
};
// 찻잎을 만듭니다
var tea = function () {
caffeinebeverage.apply (this);
};
Tea.prototype = 새로운 Caffeinebeverage ();
tea.prototype.brew = function () {
console.log("Puuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
};
tea.prototype.addcondiments = function () {
Console.log ( "레몬 추가!");
};
tea.prototype.customerWantscondiments = function () {
반환 확인 ( "레몬을 추가 하시겠습니까?");
};
또한 확인을 사용하여 사용자는 스스로 작은 재료를 추가할지 여부를 선택할 수 있습니다.
요약
템플릿 방법은 다음 상황에 적용됩니다.
1. 한 번에 알고리즘의 변하지 않는 부분을 구현하고 변이 가능한 동작을 서브 클래스에 맡기려면이를 구현하십시오.
2. 각 서브 클래스의 대중 행동은 코드의 복제를 피하기 위해 공개 부모 클래스에 추출되고 집중되어야하며 차이는 새로운 작업으로 분리되어야합니다. 마지막으로, 이러한 새로운 코드를 이러한 새로운 작업을 피하는 템플릿 메소드로 바꾸십시오.
3. 서브 클래스 확장 제어. 템플릿 메소드는 특정 지점에서 "후크"작업 만 호출 하여이 지점에서 확장을 허용합니다.
정책 패턴과 달리 템플릿 메소드는 상속을 사용하여 알고리즘의 일부를 변경하는 반면 정책 패턴은 대의원을 사용하여 전체 알고리즘을 변경합니다.