strategy.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # Поведенческий шаблон проектирования ("Стратегия")
  2. # Позволяет определить семейство схожих алгоритмов и поместить каждый из них в собственный класс, при это изолируя код алгоритмов от остальных классов
  3. import abc
  4. class Reader(metaclass=abc.ABCMeta):
  5. @abc.abstractmethod
  6. def parse(self, url: str):
  7. pass
  8. class ResourceReder:
  9. def __init__(self, reader: Reader):
  10. self.__reader = reader
  11. def set_strategy(self, reader: Reader):
  12. self.__reader = reader
  13. def read(self, url: str):
  14. self.__reader.parse(url)
  15. class NewSiteReader(Reader):
  16. def parse(self, url: str):
  17. print('Парсинг новостного сайта: ', url)
  18. class SociaNetworkReader(Reader):
  19. def parse(self, url: str):
  20. print('Парсинг ленты новостей социальной сети: ', url)
  21. class TelegramChannelReader(Reader):
  22. def parse(self, url: str):
  23. print('Парсинг канала мессенджера Telegram: ', url)
  24. if __name__ == "__main__":
  25. resource_reader = ResourceReder(
  26. NewSiteReader()
  27. )
  28. url = 'https://news.com'
  29. resource_reader.read(url)
  30. url = 'https://facebook.com'
  31. resource_reader.set_strategy(
  32. SociaNetworkReader()
  33. )
  34. resource_reader.read(url)
  35. url = '@news_channel_telegram'
  36. resource_reader.set_strategy(
  37. TelegramChannelReader()
  38. )
  39. resource_reader.read(
  40. url
  41. )
  42. # Парсинг новостного сайта: https://news.com
  43. # Парсинг ленты новостей социальной сети: https://facebook.com
  44. # Парсинг канала мессенджера Telegram: @news_channel_telegram