35 lines
1.5 KiB
Python
35 lines
1.5 KiB
Python
from abc import ABC, abstractmethod
|
||
|
||
class Flyweight(ABC):
|
||
"""Абстрактный класс Легковеса."""
|
||
@abstractmethod
|
||
def operation(self, extrinsic_state): pass
|
||
|
||
"""Конкретный Легковес, который хранит внутреннее состояние."""
|
||
class ConcreteFlyweight(Flyweight):
|
||
def __init__(self, intrinsic_state): self.intrinsic_state = intrinsic_state
|
||
def operation(self, extrinsic_state):
|
||
return f"Легковес с внутренним состоянием: {self.intrinsic_state}, и адресом: {extrinsic_state}"
|
||
|
||
class FlyweightFactory:
|
||
"""Фабрика Легковесов, которая управляет созданием и хранением Легковесов."""
|
||
def __init__(self): self._flyweights = {}
|
||
def get_flyweight(self, intrinsic_state):
|
||
if intrinsic_state not in self._flyweights:
|
||
self._flyweights[intrinsic_state] = ConcreteFlyweight(intrinsic_state)
|
||
return self._flyweights[intrinsic_state]
|
||
|
||
factory = FlyweightFactory()
|
||
|
||
# Создаем легковесы
|
||
flyweights = [
|
||
factory.get_flyweight("A"),
|
||
factory.get_flyweight("B"),
|
||
factory.get_flyweight("A"), # Этот легковес будет переиспользован
|
||
factory.get_flyweight("C"),
|
||
]
|
||
|
||
# Выполняем операции с легковесами
|
||
for i, flyweight in enumerate(flyweights):
|
||
print(flyweight.operation(f"{flyweight}"))
|