On this page
Design Patterns พื้นฐาน
วิธีแก้ปัญหาการออกแบบที่เจอซ้ำ ๆ แบบมีแบบแผน — รู้จักไว้และใช้เมื่อมันแก้ปัญหาจริง
design pattern คือ "สูตรสำเร็จ" ของวิธีแก้ปัญหาการออกแบบที่เจอบ่อย ๆ ทำให้สื่อสารกับเพื่อนร่วมทีมได้ด้วยชื่อที่เข้าใจตรงกัน หัวข้อนี้แนะนำ pattern ที่เจอบ่อยพอให้รู้จัก ไม่ใช่ท่องทุกตัว
Strategy — สลับวิธีทำงานได้
เมื่อมีหลายวิธีทำงานเดียวกัน (เช่นหลายวิธีคำนวณค่าส่ง) ทำให้สลับได้โดยไม่ต้องเขียน if ยาว ๆ
# แต่ละวิธีส่งเป็นฟังก์ชัน แล้วเลือกใช้
def standard_shipping(weight): return weight * 10
def express_shipping(weight): return weight * 25
def checkout(weight, shipping_strategy):
return shipping_strategy(weight) # สลับวิธีได้
print(checkout(2, standard_shipping)) # 20
print(checkout(2, express_shipping)) # 50Factory — รวมที่สร้าง object ไว้จุดเดียว
เมื่อต้องสร้าง object ต่างชนิดตามเงื่อนไข ใช้ factory function รวมตรรกะการสร้างไว้ที่เดียว
def create_notifier(kind):
if kind == "email":
return EmailNotifier()
elif kind == "sms":
return SMSNotifier()
raise ValueError(f"ไม่รู้จัก: {kind}")
notifier = create_notifier("email") # ผู้เรียกไม่ต้องรู้ว่าสร้างยังไงObserver & Singleton (รู้จักไว้)
| Pattern | แก้ปัญหา | ตัวอย่างที่เจอ |
|---|---|---|
| Strategy | สลับ algorithm ได้ | วิธีคำนวณ/เรียงลำดับหลายแบบ |
| Factory | รวมการสร้าง object | สร้าง object ตาม config/type |
| Observer | แจ้งเตือนเมื่อมีการเปลี่ยน | event, subscribe/publish |
| Singleton | มี instance เดียวทั้งระบบ | config, connection pool |
pattern เป็นเครื่องมือแก้ปัญหา ไม่ใช่เป้าหมาย — มือใหม่มักยัด pattern ใส่โค้ดง่าย ๆ จนซับซ้อนเกิน (ละเมิด KISS) ใช้เมื่อเจอปัญหาที่ pattern นั้นแก้จริงเท่านั้น หลายครั้งฟังก์ชันธรรมดาก็พอแล้ว
สรุปหัวข้อนี้
- design pattern = สูตรแก้ปัญหาออกแบบที่เจอซ้ำ + ภาษากลางในทีม
- Strategy: สลับวิธีทำงาน; Factory: รวมการสร้าง object
- Observer: แจ้งเตือนการเปลี่ยน; Singleton: instance เดียว
- ใช้เมื่อแก้ปัญหาจริง — อย่ายัดจนซับซ้อนเกิน (KISS)
1) ใช้ Strategy เลือกวิธีคำนวณค่าส่ง 2-3 แบบ 2) เขียน factory function สร้าง object ตาม type 3) ยกตัวอย่างสถานการณ์จริงที่เหมาะกับ Singleton 4) อธิบายว่าทำไมการยัด pattern เกินจำเป็นเป็นปัญหา