decopator.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # Структурный шаблон проектирования ("Декоратор")
  2. # Позволяет добавлять объекту поведение
  3. import abc
  4. class Iprocessor(metaclass=abc.ABCMeta):
  5. @abc.abstractmethod
  6. def process(self):
  7. pass
  8. class Transmitter(Iprocessor):
  9. def __init__(self, data: str):
  10. self.__data = data
  11. def process(self):
  12. print(f"Данные {self.__data} переданы по каналу связи")
  13. class Shell(Iprocessor):
  14. def __init__(self, pr: Iprocessor):
  15. self._processor = pr
  16. @abc.abstractmethod
  17. def process(self):
  18. self._processor.process()
  19. class HammingCoder(Shell):
  20. def __init__(self, pr: Iprocessor):
  21. super().__init__(pr)
  22. def process(self):
  23. print("Наложен помехоустойчивый код Хэмминга->", end='')
  24. self._processor.process()
  25. class Encryptor(Shell):
  26. def __init__(self, pr: Iprocessor):
  27. super().__init__(pr)
  28. def process(self):
  29. print("Шифрование данных->", end='')
  30. self._processor.process()
  31. if __name__ == "__main__":
  32. transmitter: Iprocessor = Transmitter('12345')
  33. transmitter.process()
  34. print()
  35. hamming_code: Shell = HammingCoder(transmitter)
  36. hamming_code.process()
  37. print()
  38. encryptor: Shell = Encryptor(hamming_code)
  39. encryptor.process()
  40. # Данные 12345 переданы по каналу связи
  41. # Наложен помехоустойчивый код Хэмминга->Данные 12345 переданы по каналу связи
  42. # Шифрование данных->Наложен помехоустойчивый код Хэмминга->Данные 12345 переданы по каналу связи