รูปแบบการออกแบบวิธีเทมเพลตคืออะไร

รูปแบบการออกแบบวิธีเทมเพลตคืออะไร
ผู้อ่านเช่นคุณช่วยสนับสนุน MUO เมื่อคุณทำการซื้อโดยใช้ลิงก์บนเว็บไซต์ของเรา เราอาจได้รับค่าคอมมิชชั่นจากพันธมิตร

รูปแบบการออกแบบเมธอดเทมเพลตช่วยให้คุณกำหนดขั้นตอนของอัลกอริทึมภายในเมธอดเดียวของคลาสได้ สิ่งนี้ทำให้คุณสามารถจำกัดการดำเนินการเฉพาะของแอปพลิเคชันให้เป็นวิธีการเดียว





แต่ละขั้นตอนของอัลกอริทึมที่เมธอดเทมเพลตกำหนดคือเมธอดภายใน อย่างไรก็ตาม วิธีเทมเพลตจะจัดการเฉพาะการนำวิธีการภายในบางส่วนไปใช้เท่านั้น คลาสย่อยมักจะใช้เมธอดภายในของเมธอดเท็มเพลตอย่างน้อยหนึ่งวิธี





คลิปวิดีโอประจำวันนี้

คลาสย่อยสามารถใช้เมธอดนามธรรมได้ แต่ไม่สามารถกำหนดอัลกอริทึมใหม่ที่ใช้โดยเมธอดสุดท้ายได้





วิธีการทำงานของเทมเพลต

รูปแบบวิธีการเทมเพลตทั่วไปจะมีโครงสร้างดังต่อไปนี้:

final void templateMethod() { 
abstractOperation1();
abstractOperation2();

concreteOperation1();
concreteOperation2();

hook();
}

สิ่งสำคัญอันดับแรกที่ควรทราบคือ templateMethod() ถือเป็นที่สิ้นสุด ดังนั้นจึงไม่มีคลาสย่อยใดสามารถแทนที่เมธอดนี้ได้ สิ่งสำคัญอีกประการที่ควรทราบคือเมธอดสามประเภทที่รูปแบบเมธอดเทมเพลตใช้: คอนกรีต นามธรรม และเบ็ด



คลาสนามธรรมที่มีเมธอดเทมเพลตใช้เมธอดที่เป็นรูปธรรมทั้งหมด ในขณะที่คลาสย่อยที่เป็นรูปธรรมใช้เมธอดนามธรรม โดยทั่วไปวิธีการของ hook จะไม่ทำอะไรเลยตามค่าเริ่มต้น แต่คลาสย่อยมีความสามารถในการแทนที่วิธีการเหล่านี้เมื่อจำเป็น

การใช้รูปแบบวิธีการเทมเพลตใน Java

รูปแบบเมธอดเทมเพลตทำหน้าที่เป็นเฟรมเวิร์กสำหรับแอปพลิเคชัน ดังนั้น คุณมักจะเห็นรูปแบบนี้ในเฟรมเวิร์กซอฟต์แวร์ที่ให้พิมพ์เขียวสำหรับการพัฒนาแอปพลิเคชัน





ฉันส่งไปที่ xbox one ได้ไหม

ตัวอย่างเช่น คุณสามารถเชื่อมต่อแอปพลิเคชันของคุณกับระบบฐานข้อมูลระบบใดระบบหนึ่งได้ ขั้นตอนในการเชื่อมต่อและใช้ฐานข้อมูลเป็นไปตามเทมเพลตที่คล้ายคลึงกัน:

public abstract class Database { 
// template method
final void databaseTemplate() {
// abstract methods
setDBDriver();
setCredentials();

// concrete method
connect();

// abstract methods
createDB();
setData();
readData();

// hook methods
if (userWantsToUpdate()) {
updateData();
}

if (userWantsToDelete()) {
deleteData();
}

// concrete method
closeConnection();
}

abstract void setDBDriver();
abstract void setCredentials();
abstract void createDB();
abstract void setData();
abstract void readData();
abstract void updateData();
abstract void deleteData();

void connect() {
System.out.println("Connecting to database...");
}

void closeConnection() {
System.out.println("Destroying database connection...");
}

boolean userWantsToUpdate() {
return false;
}

boolean userWantsToDelete() {
return false;
}
}

คลาสฐานข้อมูลตัวอย่างนี้ใช้รูปแบบเมธอดเทมเพลตเพื่อสร้างเทมเพลตที่คุณสามารถใช้กับฐานข้อมูลใดก็ได้ ในการใช้ฐานข้อมูล แอปพลิเคชันของคุณจะต้องเชื่อมต่อกับฐานข้อมูล จากนั้นจึงทำลายการเชื่อมต่อหลังการใช้งาน กิจกรรมเหล่านี้มักจะเหมือนกันสำหรับฐานข้อมูลทั้งหมด ดังนั้นคลาสฐานข้อมูลนามธรรมสามารถใช้ เชื่อมต่อ() และ ปิดการเชื่อมต่อ() วิธีการ





วิธีอื่นๆ ในวิธีเทมเพลตจะแตกต่างกันไปตามประเภทของฐานข้อมูล ตัวอย่างเช่น ฐานข้อมูล MySQL เก็บข้อมูลในตาราง ในขณะที่ a ฐานข้อมูล MongoDB เก็บข้อมูลในคอลเล็กชัน . หากคุณต้องการใช้ a ฐานข้อมูล MySQL ใน Java เพียงสร้างคลาส MySQL ใหม่ที่ขยายคลาสฐานข้อมูล:

public class MySQL extends Database { 
@Override
void setDBDriver() {
System.out.println("Selecting MySQL driver...");
}

@Override
void setCredentials() {
System.out.println("Setting MySQL database Credential...");
}

@Override
void createDB() {
System.out.println("Creating a new table...");
}

@Override
void setData() {
System.out.println("Inserting data into database...");
}

@Override
void readData() {
System.out.println("Retrieving data from database...");
}

@Override
void updateData() {
System.out.println("Updating data in database...");
}

@Override
void deleteData() {
System.out.println("Deleting data from database...");
}
}

คลาส MySQL ใช้เมธอดนามธรรมทั้งหมดของคลาสฐานข้อมูล นอกจากนี้ยังสามารถแทนที่วิธีการที่เป็นรูปธรรมบางอย่างได้ อย่างไรก็ตาม มันไม่สามารถสัมผัส ฐานข้อมูลTemplate() วิธีซึ่งใช้คำหลักสุดท้าย

public class Main { 
public static void main(String[] args) {
Database mySQLDB = new MySQL();
mySQLDB.databaseTemplate();
}
}

คลาสหลักนี้สร้างอ็อบเจ็กต์ฐานข้อมูล MySQL ใหม่และใช้วิธีเทมเพลตเพื่อจำลองวิธีที่แอปพลิเคชันจะเชื่อมต่อกับฐานข้อมูล การรันเมธอดหลักจะพิมพ์เอาต์พุตต่อไปนี้ไปยังคอนโซล:

  วิธีเทมเพลตฐานข้อมูล MySQL

ในผลลัพธ์ คุณจะสังเกตเห็นว่าแอปพลิเคชันไม่เคยเรียก อัปเดตข้อมูล () และ ลบข้อมูล() วิธีการ นี่คือเหตุผลที่วิธีเบ็ดมีความสำคัญ ในฐานข้อมูล SQL คุณจะต้องสร้างตารางใหม่ แทรกข้อมูล และดูข้อมูลของคุณ อย่างไรก็ตาม คุณอาจไม่ต้องการอัปเดตหรือลบข้อมูล ดังนั้นเมธอดของ hook จึงให้ตัวเลือกคลาสย่อยในการควบคุมแง่มุมที่สำคัญเหล่านี้ของอัลกอริธึม

@Override 
boolean userWantsToUpdate() {
return true;
}

เพียงเพิ่มโค้ดด้านบนลงในคลาส MySQL ตอนนี้แอปพลิเคชันจะอัปเดตข้อมูลในฐานข้อมูล หากคุณเรียกใช้คลาสหลักอีกครั้ง จะแสดงเอาต์พุตที่อัปเดตต่อไปนี้:

  อัปเดตเมธอดเทมเพลตฐานข้อมูล MySQL

อย่างที่คุณเห็น แอปพลิเคชันกำลังอัปเดตข้อมูลในฐานข้อมูล

ประโยชน์ของการใช้รูปแบบการออกแบบวิธีเทมเพลต

ประโยชน์หลักของรูปแบบวิธีการเทมเพลตคือส่งเสริมการนำซอฟต์แวร์กลับมาใช้ใหม่ได้ รูปแบบการออกแบบนี้ยังสนับสนุนการเขียนโปรแกรมที่มีประสิทธิภาพ คลาสย่อยต้องการใช้เมธอดที่มีลักษณะเฉพาะสำหรับการดำเนินการเท่านั้น

นอกจากนี้ แอปพลิเคชันที่ใช้รูปแบบเมธอดเท็มเพลตมีความปลอดภัยมากขึ้น เนื่องจากคลาสภายนอกไม่สามารถเปลี่ยนแปลงโครงสร้างการดำเนินการได้