Design Pattern ใน Python

Decorator Pattern in Python

เรียนรู้ Decorator Pattern in Python ด้วยตัวอย่างที่แก้ไขและรันออนไลน์ได้

Decorator Pattern คืออะไร?

เรียนรู้ Decorator Pattern in Python ด้วยตัวอย่างที่แก้ไขและรันออนไลน์ได้

ควรใช้เมื่อใด?

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

โค้ดตัวอย่าง

รันโค้ด →
main.py
class Message:
    # Decorator: wrap an object to add behavior dynamically.
    def render(self): return "hello"


class Uppercase:
    def __init__(self, wrapped): self.wrapped = wrapped
    def render(self): return self.wrapped.render().upper()


class Logger:
    def __init__(self, wrapped): self.wrapped = wrapped

    def render(self):
        # Add behavior while preserving the render interface.
        return "LOG: " + self.wrapped.render()


print(Logger(Uppercase(Message())).render())

ผลลัพธ์ที่คาดหวัง

LOG: HELLO

หลักการทำงาน

ตัวอย่างนี้สาธิต Decorator Pattern in Python ลองเปลี่ยนค่าอินพุตเพื่อศึกษาการทำงานของโค้ด

เปลี่ยนค่าและรันโปรแกรมด้วย คอมไพเลอร์ Python ออนไลน์ของ CodeUtility โดยไม่ต้องติดตั้ง Python

แบบฝึกหัด

ลองเปลี่ยน input และทดสอบกรณีขอบก่อนใช้ชุดข้อมูลที่ใหญ่ขึ้น

  1. เปลี่ยนโดเมนของตัวอย่างโดยยังคงโครงสร้างของแพตเทิร์นไว้
  2. เปรียบเทียบแพตเทิร์นกับการเขียนแบบที่ง่ายกว่าและอธิบายข้อแลกเปลี่ยน
  3. เขียนการทดสอบให้ผู้มีส่วนร่วมแต่ละส่วนก่อนเพิ่มการเขียนแบบอื่น
รันใน Python IDE →