แนะนำ
วิธีการเทมเพลตกำหนดโครงกระดูกของอัลกอริทึมการดำเนินงานและล่าช้าขั้นตอนบางอย่างไปยังคลาสย่อย วิธีการเทมเพลตช่วยให้คลาสย่อยสามารถกำหนดขั้นตอนเฉพาะบางอย่างของอัลกอริทึมโดยไม่ต้องเปลี่ยนโครงสร้างของอัลกอริทึม
วิธีการเทมเพลตเป็นเทคนิคพื้นฐานสำหรับการใช้รหัสซ้ำซึ่งมีความสำคัญอย่างยิ่งในไลบรารีคลาสเพราะพวกเขาแยกพฤติกรรมสาธารณะในไลบรารีคลาส วิธีการเทมเพลตนำไปสู่โครงสร้างการควบคุมแบบย้อนกลับซึ่งเป็น "กฎหมายฮอลลีวูด" ในตำนานนั่นคือ "อย่ามองหาเราเราจะมองหาคุณ" ซึ่งหมายถึงชั้นเรียนที่เรียกการดำเนินการของชั้นเรียนไม่ใช่วิธีอื่น ๆ อาการคอนกรีตเป็นคลาสนามธรรม (และวิธีการนามธรรมในพวกเขา) ในภาษาการเขียนโปรแกรมเชิงวัตถุรวมถึงคลาสย่อยที่สืบทอดคลาสนามธรรม (และวิธีการนามธรรม)
ข้อความ
ตัวอย่างเช่นการทำชาและกาแฟมีขั้นตอนเดียวกันเช่นน้ำเดือดการต้มบดเทลงในถ้วยเพิ่มส่วนผสมเล็ก ๆ ฯลฯ อย่างไรก็ตามวิธีการชงเครื่องดื่มแต่ละชนิดและส่วนผสมเล็ก ๆ ที่เพิ่มเข้ามานั้นแตกต่างกัน
ก่อนอื่นกำหนดขั้นตอนนามธรรม:
การคัดลอกรหัสมีดังนี้:
var caffeineBeverage = function () {
-
caffeineBeverage.prototype.preperecipe = 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) จะส่งคืนจริงตามค่าเริ่มต้น ค่านี้สามารถเขียนใหม่ได้เมื่อเขียนฟังก์ชั่นย่อยใหม่
ฟังก์ชั่นสองฟังก์ชั่นต่อไปนี้เป็นฟังก์ชั่นที่สอดคล้องกันสำหรับการชงกาแฟและชาชง:
การคัดลอกรหัสมีดังนี้:
// ทำกาแฟ
var coffee = function () {
CaffeineBeverage.Apply (นี่);
-
กาแฟ prototype = ใหม่ caffeineBeverage ();
coffee.prototype.brew = function () {
console.log ("ฉันอยากเทกาแฟจากเครื่องชงกาแฟ!");
-
coffee.prototype.addcondiments = function () {
console.log ("เพิ่มน้ำตาลและนม");
-
coffee.prototype.customerwantscondiments = function () {
กลับยืนยัน ("คุณต้องการเพิ่มน้ำตาลและนมหรือไม่");
-
// ทำใบชา
var tea = function () {
CaffeineBeverage.Apply (นี่);
-
tea.prototype = ใหม่ caffeineBeverage ();
tea.prototype.brew = function () {
console.log("Puuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuU
-
tea.prototype.addcondiments = function () {
console.log ("เพิ่มมะนาว!");
-
tea.prototype.customerwantscondiments = function () {
return ยืนยัน ("คุณต้องการเพิ่มมะนาวหรือไม่");
-
นอกจากนี้การใช้การยืนยันช่วยให้ผู้ใช้สามารถเลือกได้ว่าจะเพิ่มส่วนผสมเล็ก ๆ ด้วยตัวเองซึ่งดีมากใช่ไหม
สรุป
วิธีการเทมเพลตใช้กับสถานการณ์ต่อไปนี้:
1. ใช้ส่วนที่ไม่เปลี่ยนแปลงของอัลกอริทึมในครั้งเดียวและปล่อยให้พฤติกรรมที่ไม่แน่นอนเป็นคลาสย่อยเพื่อนำไปใช้
2. พฤติกรรมสาธารณะในแต่ละคลาสย่อยควรได้รับการสกัดและเข้มข้นในคลาสแม่สาธารณะเพื่อหลีกเลี่ยงการทำซ้ำของรหัสและความแตกต่างจะถูกแยกออกเป็นการดำเนินการใหม่ ในที่สุดแทนที่รหัสที่แตกต่างกันเหล่านี้ด้วยวิธีการเทมเพลตสำหรับฟิชชิ่งการดำเนินการใหม่เหล่านี้
3. การควบคุมส่วนขยาย subclass วิธีการเทมเพลตเรียกใช้การดำเนินการ "hook" ที่จุดเฉพาะเพื่อให้สามารถขยายส่วนขยายที่จุดเหล่านี้
ซึ่งแตกต่างจากรูปแบบนโยบายวิธีการแม่แบบใช้การสืบทอดเพื่อเปลี่ยนส่วนหนึ่งของอัลกอริทึมในขณะที่รูปแบบนโยบายใช้ผู้ได้รับมอบหมายเพื่อเปลี่ยนอัลกอริทึมทั้งหมด