mirror of
https://github.com/rjNemo/design-patterns
synced 2026-06-06 02:26:40 +00:00
36 lines
1.4 KiB
Python
36 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 = []
|
|
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)
|