Tôi hiểu rằng vì Python có các hàm hạng nhất, sử dụng mẫu Chiến lược thường chỉ là vấn đề chuyển một hàm làm đối số và không yêu cầu học sinh có lớp học. Nhưng điều gì sẽ xảy ra nếu "chiến lược" không phải là các hàm đơn lẻ, mà là các nhóm các hàm liên quan được chọn một cách hợp lý như một tập hợp?Mô hình chiến lược trong Python khi một "chiến lược" bao gồm nhiều hơn một hàm
Giống như, đây là một tầm thường và giả tạo Ví dụ:
class HexFormatter(object):
"""Base class for strategies to format hexadecimal numbers."""
pass
class Motorola(HexFormatter):
"""Format Motorola style (e.g. $1234)"""
@staticmethod
def formatbyte(n):
return "$%02X" % n
@staticmethod
def formatword(n):
return "$%04X" % n
class Intel(HexFormatter):
"""Format Intel-style (e.g. 1234h)"""
@staticmethod
def formatbyte(n):
return "%02Xh" % n
@staticmethod
def formatword(n):
return "%04Xh" % n
Ý tưởng là bạn chọn một chiến lược và bạn sẽ có được chức năng cho byte định dạng và chức năng để định dạng chữ như một tập hợp, hơn là cần phải xác định chúng riêng lẻ. Ví dụ này giống như cách bạn thực hiện nó bằng một ngôn ngữ như C++ (ngoại trừ các phương thức sẽ không tĩnh vì bạn không thể có các phương thức tĩnh ảo trong C++) và nó không giống như nó không hoạt động trong Python. Nhưng nó liên quan đến việc xác định một loạt các "lớp" chỉ có các phương pháp tĩnh và không có nghĩa là được khởi tạo, mà dường như không có Pythonic bằng cách nào đó.
Có cách nào thành ngữ hơn để thực hiện việc này bằng Python không?
Nó cần thiết cho chiến lược là đối tượng duy nhất? Nếu không, bạn có thể chuyển nhiều hàm, ví dụ: thông qua các đối số từ khóa hoặc có thể chuyển tuple hoặc có tên là bộ hàm. –