1. รูปแบบของ Template Method Pattern

ในการพัฒนาซอฟต์แวร์ รูปแบบของ Template Method เป็นรูปแบบออกแบบที่เชื่อมโยงกับพฤติกรรม ที่กำหนดโครงสร้างหลักของอัลกอริทึม และเลื่อนการปฏิบัติบางขั้นตอนให้มีการปฏิบัติในคลาสย่อย ซึ่งทำให้คลาสย่อยสามารถปฏิบัติตนเองได้ที่ขั้นตอนที่แบ่งเป็นส่วนๆๆ โดยไม่เปลี่ยนโครงสร้างของอัลกอริทึม

2. คุณสมบัติและข้อดีของ Template Method Pattern

คุณสมบัติและข้อดีของ Template Method Pattern ประกอบด้วย:

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

3. ตัวอย่างการปฏิบัติการของ Template Method Pattern

Template Method Pattern มีการปฏิบัติที่หลากหลายในการพัฒนาซอฟต์แวร์ ตัวอย่างที่สามารถเห็นได้และโดดเด่น ได้แก่:

  • ตัวอย่างของเมทอดตะกูลในเฟรมเวิร์ค: เมทอดตะกูลให้จุดขยายที่ขั้นตอนบางขั้นตอนของอัลกอริทึม ที่ช่วยให้คลาสย่อยสามารถขยายมาใช้ได้ตามต้องการ
  • เมทอดตะกูลสำหรับการดำเนินการฐานข้อมูล: เช่น ในการดำเนินการฐานข้อมูลการเชื่อมต่อ เปิดการทำรายการ ดำเนินการคำสั่ง SQL ปิดการเชื่อมต่อ เป็นต้น สามารถที่จะเป็นเมทอดตะกูลที่จะนำไปปฎิบัติโดยคลาสย่อย
  • การจัดการเหตุการณ์ในแอพลิเคชัน GUI: การจัดการเหตุการณ์ในแอพลิเคชัน GUI ที่มักจะกล่าวถึงกฎ และกระบวนการบางอย่าง ซึ่งสามารถที่จะนำมาใช้ได้ด้วยการใช้ Template Method Pattern

4. การปฏิบัติของ Template Method Pattern ใน Golang

4.1. UML แผนภาพคลาสของ Golang

Template Method Pattern in Golang

4.2. การนำเสนอตัวอย่าง

ในตัวอย่างของ Template Method Pattern มีคลาสบัญชีย่อย AbstractClass ซึ่งรวมถึงเมทอดแม่แบบ TemplateMethod และบางเมทอดนิยามอเมทอดเฉพาะ AbstractMethod1 และ AbstractMethod2 คลาสย่อย ConcreteClass1 และ ConcreteClass2 สืบทอดมาจาก AbstractClass และนำไปปฏิบัติเมทอดนิยามที่เฉพาะเจาะจง

4.3. ขั้นตอนการปฏิบัติของ Step 1: กำหนดคลาส Abstract Template

ขั้นแรก เราต้องกำหนดคลาสแม่แบบ AbstractClass ในนั้น เราจะประกาศเมทอดแม่แบบและเมทอดนิยามแบบหนึ่ง

package main

import "fmt"

type AbstractClass interface {
	TemplateMethod()
	AbstractMethod1()
	AbstractMethod2()
	ConcreteMethod()
}

type BaseClass struct{}

func (b *BaseClass) TemplateMethod() {
	b.AbstractMethod1()
	b.AbstractMethod2()
	b.ConcreteMethod()
}

func (b *BaseClass) ConcreteMethod() {
	fmt.Println("กำลังปฏิบัติเมทอดเหล็ก")
}

4.4. ขั้นตอนการปฏิบัติของ Step 2: การปฏิบัติคลาสแม่แบบเฉพาะ

ขั้นตอนถัดไป เราต้องสร้างคลาสแม่แบบเฉพาะ เช่น ConcreteClass1 และ ConcreteClass2 และปฏิบัติเมทอดนิยามอเมทอดของเขา

type ConcreteClass1 struct {
	*BaseClass
}

func NewConcreteClass1() *ConcreteClass1 {
	return &ConcreteClass1{
		&BaseClass{},
	}
}

func (c *ConcreteClass1) AbstractMethod1() {
	fmt.Println("กำลังปฏิบัติเมทอด1 ของ ConcreteClass1")
}

func (c *ConcreteClass1) AbstractMethod2() {
	fmt.Println("กำลังปฏิบัติเมทอด2 ของ ConcreteClass1")
}

type ConcreteClass2 struct {
	*BaseClass
}

func NewConcreteClass2() *ConcreteClass2 {
	return &ConcreteClass2{
		&BaseClass{},
	}
}

func (c *ConcreteClass2) AbstractMethod1() {
	fmt.Println("กำลังปฏิบัติเมทอด1 ของ ConcreteClass2")
}

func (c *ConcreteClass2) AbstractMethod2() {
	fmt.Println("กำลังปฏิบัติเมทอด2 ของ ConcreteClass2")
}

4.5. ขั้นตอนการปฏิบัติของ Step 3: การกำหนดเมทอดแม่แบบและเฉพาะ

ในคลาสแม่แบบเราจะต้องกำหนดเมทอดบางอย่างที่เป็นเมทอดแม่แบบและหลังจากนั้นเรียกใช้เมทอดเฉพาะในเมทอดแม่แบบ

4.6. ขั้นตอนการปฏิบัติของ Step 4: การใช้ Template Method ใน Client

สุดท้าย เราสามารถใช้เมทอดแม่แบบในรหัสลูกค้าเพื่อปฏิบัติตรรกะในธุรกิจเฉพาะได้

func main() {
	class1 := NewConcreteClass1()
	class1.TemplateMethod()

	class2 := NewConcreteClass2()
	class2.TemplateMethod()
}

4.7 การปฏิบัติที่ 5: ผลลัพธ์การดำเนินการ

เมื่อเราเรียกใช้โค้ดข้างต้น เราจะได้ผลลัพธ์ดังนี้:

กำลังดำเนินการ method1 ของ ConcreteClass1
กำลังดำเนินการ method2 ของ ConcreteClass1
การดำเนินการตัวอย่างที่เป็นเส้นเลือด
กำลังดำเนินการ method1 ของ ConcreteClass2
กำลังดำเนินการ method2 ของ ConcreteClass2
การดำเนินการตัวอย่างที่เป็นเส้นเลือด

ข้างต้นคือการปฏิบัติและการใช้ตัวอย่างของรูปแบบเทมเพลตเมธอดใน Golang โดยการใช้รูปแบบเทมเพลตเมธอด เราสามารถซ่อนพฤติกรรมที่เป็นทั่วไปไว้ในคลาสหนึ่ง และอนุญาตให้คลาสย่อยเฉพาะของตนเองมาปรับเปลี่ยนพฤติกรรมของตน ซึ่งสามารถเพิ่มความสามารถในการใช้โค้ดและการขยายของโค้ด

ข้อสรุป

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