mirror of
https://github.com/rjNemo/design-patterns
synced 2026-06-06 10:36:39 +00:00
* doc: create package & update general TOCs * doc: add documentation * add code example * reformat using black
37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
from structural.facade.subsystems import Subsystem1, Subsystem2
|
|
|
|
|
|
class Facade:
|
|
"""
|
|
The Facade class provides a simple interface to the complex logic of one or
|
|
several subsystems. The Facade delegates the client requests to the
|
|
appropriate objects within the subsystem. The Facade is also responsible for
|
|
managing their lifecycle. All of this shields the client from the undesired
|
|
complexity of the subsystem.
|
|
"""
|
|
|
|
def __init__(self, subsystem1: Subsystem1, subsystem2: Subsystem2) -> None:
|
|
"""
|
|
Depending on your application's needs, you can provide the Facade with
|
|
existing subsystem objects or force the Facade to create them on its
|
|
own.
|
|
"""
|
|
self._subsystem1 = subsystem1 or Subsystem1()
|
|
self._subsystem2 = subsystem2 or Subsystem2()
|
|
|
|
def operation(self) -> str:
|
|
"""
|
|
The Facade's methods are convenient shortcuts to the sophisticated
|
|
functionality of the subsystems. However, clients get only to a fraction
|
|
of a subsystem's capabilities.
|
|
"""
|
|
results = [
|
|
"Facade initializes subsystems:",
|
|
self._subsystem1.operation1(),
|
|
self._subsystem2.operation1(),
|
|
"Facade orders subsystems to perform the action:",
|
|
self._subsystem1.operation_n(),
|
|
self._subsystem2.operation_z(),
|
|
]
|
|
|
|
return "\n".join(results)
|