1. วิธีการใช้งาน Factory Method Pattern

Factory Method Pattern เป็นรูปแบบการออกแบบที่เกี่ยวกับการสร้างวัตถุซึ่งให้วิธีการห่อหุ้มกระบวนการสร้างวัตถุในคลาสหลัก โดยที่ลูกค้าจะสามารถสร้างวัตถุโดยการเรียกใช้เมธอดของโรงงานโดยที่ไม่ต้องกังวัตถุวิเคราะห์กระบวนการสร้าง.

2. ลักษณะและข้อดีของ Factory Method Pattern

ลักษณะของ Factory Method Pattern ประกอบด้วย:

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

ข้อดีของ Factory Method Pattern รวมถึง:

  • ห่อหุ้มกระบวนการสร้างวัตถุ, ทำให้ระบบมีความยืดหยุ่นและสามารถขยายได้
  • ซ่อนรายละเอียดการปฏิบัติของคลาสผลิตภัณฑ์เฉพาะ, ลดความขึ้นอยู่กับลูกค้าและการผูกมัดกับคลาสเฉพาะ
  • มีวิธีมาตรฐานในการสร้างผลิตภัณฑ์, สะดวกสบายติดตั้งระบบและขยาย

3. ลักษณะของ Factory Method Pattern

Factory Method Pattern เหมาะสำหรับสถานการณ์ต่อไปนี้:

  • ลูกค้าไม่ได้ขึ้นอยู่กับคลาสผลิตภัณฑ์เฉพาะ, แต่ขึ้นอยู่กับอินเตอร์เฟซผลิตภัณฑ์
  • ลูกค้าต้องการสร้างวัตถุผลิตภัณฑ์ที่แตกต่างกันตามเงื่อนไขที่แตกต่างกัน
  • มีความต้องการแพ็กห่อและซ่อนกระบวนการสร้างวัตถุ

4. การประยุกต์ Factory Method Pattern ใน Golang

4.1 UML แผนภาพคลาส Golang Factory Method Pattern

Golang Factory Method Pattern

4.2 ขั้นตอนการประยุกต์ขั้นที่ 1: กำหนดอินเตอร์เฟซผลิตภัณฑ์นามบัติ

package factory

// Product เป็นอินเตอร์เฟซผลิตภัณฑ์นามบัติ
type Product interface {
	Operation() string
}

4.3 ขั้นตอนการประยุกต์ขั้นที่ 2: สร้างคลาสภาพผลิตภัณฑ์ที่อินเตอร์ฟซเสริม

package factory

// ConcreteProductA เป็นคลาสผลิตภัณฑ์ที่เป็นภาพเป็นคลาส A
type ConcreteProductA struct{}

// Operation เป็นเมธอดของคลาสผลิตภัณฑ์ A
func (p *ConcreteProductA) Operation() string {
	return "ConcreteProductA"
}

// ConcreteProductB เป็นคลาสผลิตภัณฑ์ที่เป็นภาพเป็นคลาส B
type ConcreteProductB struct{}

// Operation เป็นเมธอดของคลาสผลิตภัณฑ์ B
func (p *ConcreteProductB) Operation() string {
	return "ConcreteProductB"
}

4.4 ขั้นตอนการประยุกต์ขั้นที่ 3: กำหนดอินเตอร์เฟซโรงงานนามบัติ

package factory

// Factory เป็นอินเตอร์เฟซโรงงานนามบัติ
type Factory interface {
	CreateProduct() Product
}

4.5 ขั้นตอนการประยุกต์ขั้นที่ 4: สร้างคลาสโรงงานเฉพาะที่อิมเพล็มเมนท์

package factory

// ConcreteFactoryA เป็นคลาสโรงงานที่เป็นภาพเป็นคลาส A
type ConcreteFactoryA struct{}

// CreateProduct เป็นเมธอดของคลาสโรงงาน A
func (f *ConcreteFactoryA) CreateProduct() Product {
	return &ConcreteProductA{}
}

// ConcreteFactoryB เป็นคลาสโรงงานที่เป็นภาพเป็นคลาส B
type ConcreteFactoryB struct{}

// CreateProduct เป็นเมธอดของคลาสโรงงาน B
func (f *ConcreteFactoryB) CreateProduct() Product {
	return &ConcreteProductB{}
}

4.6 ขั้นตอนการประยุกต์ขั้นที่ 5: คลายเอ็นท์ช่วงการใช้ Factory Method เพื่อสร้างวัตถุผลิตภัณฑ์

package main

import (
	"fmt"
	"github.com/your/package/factory"
)

func main() {
	// สร้าง Concrete Factory A
	factoryA := &factory.ConcreteFactoryA{}
	// ชายเวคเมธอดโรงงานเพื่อสร้างวัตถุผลิตภัณฑ์
	productA := factoryA.CreateProduct()
	fmt.Println(productA.Operation())

	// สร้าง Concrete Factory B
	factoryB := &factory.ConcreteFactoryB{}
	// ชายเวคเมธอดโรงงานเพื่อสร้างวัตถุผลิตภัณฑ์
	productB := factoryB.CreateProduct()
	fmt.Println(productB.Operation())
}

ในโค้ดด้านบน, เรากำหนดอินเตอร์เฟซผลิตภัณฑ์ Product และคลาสผลิตภัณฑ์เนื้อความ ConcreteProductA และ ConcreteProductB. จากนั้น, เรากำหนดอินเตอร์เฟซโรงงาน Factory และคลาสโรงงาน ConcreteFactoryA และ ConcreteFactoryB. ลูกค้าสามารถสร้างวัตถุผลิตภัณฑ์เฉพาะโดยการเรียกร้องวิธีการโรงงานของคลาสเฉพาะ, ซึ่งจะประสบการณ์ Factory Method pattern.

ด้วยขั้นตอนด้านบน, เราได้ทำการประยุกต์ Factory Method pattern ใน Golang เรียบร้อยแล้ว. วิธีการให้เลี้ยงลูกค้าจากคลาสผลิตภัณฑ์เฉพาะ, ทำให้ลูกค้าสนใจเฉพาะอินเตอร์เฟซผลิตภัณฑ์เท่านั้น. ในขณะเดียวกัน, รายละเอียดในการทำปฏิบัติของคลาสผลิตภัณฑ์เฉพาะถูกห่อผู้และไว้ซ่อนที่คลาสโรงงานเฉพาะ, ที่ทำให้ระบบยืดหยุ่นและสามารถขยายได้หลายขึ้น. Factory Method pattern เป็นรูปแบบที่สร้่างความรู้นและการขยายใช้ในการประยุกต์ในชีวิตสามชาร, โดยเฉพาะเสียแดน้ ซหรือมีความต้องการปัจจุบันที่ต้องการห่อโหลของเนื้ื่องถันค่าน่าน่าเเไมบยบำถารสปรียบดำำาำซำการำร บำเลบำเทียบุ และใบบำำบ ดำปีบำเมำยบำะ้บ.