close up photo of programming of codes

codecungnhau.com

Một trang web về kỹ thuật lập trình

Python Design Patterns: Facade

Facade là một mẫu thiết kế cấu trúc cung cấp một giao diện đơn giản (nhưng có giới hạn) cho một hệ thống phức tạp gồm các lớp, thư viện hoặc framework.

Trong khi Facade giảm độ phức tạp tổng thể của ứng dụng, nó cũng giúp chuyển các phần phụ thuộc không mong muốn đến một nơi.

Cách sử dụng mẫu

Sử dụng: Mẫu Facade thường được sử dụng trong các ứng dụng được viết bằng Python. Nó đặc biệt hữu ích khi làm việc với các thư viện và API phức tạp.

Nhận dạng: Facade có thể được nhận dạng trong một lớp có giao diện đơn giản, nhưng ủy quyền hầu hết công việc cho các lớp khác. Thông thường, các facade quản lý toàn bộ vòng đời của các đối tượng mà chúng sử dụng.

Chương trình mẫu

main.cpp

from __future__ import annotations
class Facade:
    """
    Lớp Facade cung cấp một giao diện đơn giản cho logic phức tạp của một 
    hoặc một số hệ thống con. Facade ủy quyền yêu cầu của client cho các đối 
    tượng thích hợp trong hệ thống con. Facade cũng chịu trách nhiệm quản lý 
    vòng đời của chúng. Tất cả điều này bảo vệ client khỏi sự phức tạp không 
    mong muốn của hệ thống con.
    """
    def __init__(self, subsystem1: Subsystem1, subsystem2: Subsystem2) -> None:
        """
        Tùy thuộc vào nhu cầu của ứng dụng, bạn có thể cung cấp cho Facade 
        các đối tượng hệ thống con hiện có hoặc buộc Facade tự tạo chúng.
        """
        self._subsystem1 = subsystem1 or Subsystem1()
        self._subsystem2 = subsystem2 or Subsystem2()
    def operation(self) -> str:
        """
        Các phương thức của Facade là những lối tắt thuận tiện cho chức năng 
        phức tạp của các hệ thống con. Tuy nhiên, client chỉ nhận được một 
        phần nhỏ khả năng của hệ thống con.
        """
        results = []
        results.append("Facade initializes subsystems:")
        results.append(self._subsystem1.operation1())
        results.append(self._subsystem2.operation1())
        results.append("Facade orders subsystems to perform the action:")
        results.append(self._subsystem1.operation_n())
        results.append(self._subsystem2.operation_z())
        return "\n".join(results)
class Subsystem1:
    """
    Subsystem có thể chấp nhận các yêu cầu từ mặt tiền hoặc trực tiếp từ client. 
    Trong mọi trường hợp, đối với Subsystem, Facade vẫn là một ứng dụng 
    khách khác và nó không phải là một phần của Subsystem.
    """
    def operation1(self) -> str:
        return "Subsystem1: Ready!"
    # ...
    def operation_n(self) -> str:
        return "Subsystem1: Go!"
class Subsystem2:
    """
    Một số facade có thể hoạt động với nhiều hệ thống con cùng một lúc.
    """
    def operation1(self) -> str:
        return "Subsystem2: Get ready!"
    # ...
    def operation_z(self) -> str:
        return "Subsystem2: Fire!"
def client_code(facade: Facade) -> None:
    """
    Client hoạt động với các hệ thống con phức tạp thông qua một giao diện đơn 
    giản do Facade cung cấp. Khi một Facade quản lý vòng đời của hệ thống con, 
    client thậm chí có thể không biết về sự tồn tại của hệ thống con. Cách tiếp cận 
    này cho phép bạn kiểm soát mức độ phức tạp.
    """
    print(facade.operation(), end="")
if __name__ == "__main__":
    # Client có thể có một số đối tượng của hệ thống con đã được tạo. Trong
    # trường hợp này, có thể đáng giá khi khởi tạo Facade bằng những đối
    # tượng này thay vì để Facade tạo các thể hiện mới.
    subsystem1 = Subsystem1()
    subsystem2 = Subsystem2()
    facade = Facade(subsystem1, subsystem2)
    client_code(facade)

Kết quả

Facade initializes subsystems:
Subsystem1: Ready!
Subsystem2: Get ready!
Facade orders subsystems to perform the action:
Subsystem1: Go!
Subsystem2: Fire!


Đã đăng vào

trong

,

bởi

Bình luận

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *