12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # Поведенческий шаблон проектирования ("Стратегия")
- # Позволяет определить семейство схожих алгоритмов и поместить каждый из них в собственный класс, при это изолируя код алгоритмов от остальных классов
- import abc
- class Reader(metaclass=abc.ABCMeta):
- @abc.abstractmethod
- def parse(self, url: str):
- pass
- class ResourceReder:
- def __init__(self, reader: Reader):
- self.__reader = reader
- def set_strategy(self, reader: Reader):
- self.__reader = reader
- def read(self, url: str):
- self.__reader.parse(url)
- class NewSiteReader(Reader):
- def parse(self, url: str):
- print('Парсинг новостного сайта: ', url)
- class SociaNetworkReader(Reader):
- def parse(self, url: str):
- print('Парсинг ленты новостей социальной сети: ', url)
- class TelegramChannelReader(Reader):
- def parse(self, url: str):
- print('Парсинг канала мессенджера Telegram: ', url)
- if __name__ == "__main__":
- resource_reader = ResourceReder(
- NewSiteReader()
- )
- url = 'https://news.com'
- resource_reader.read(url)
- url = 'https://facebook.com'
- resource_reader.set_strategy(
- SociaNetworkReader()
- )
- resource_reader.read(url)
- url = '@news_channel_telegram'
- resource_reader.set_strategy(
- TelegramChannelReader()
- )
- resource_reader.read(
- url
- )
- # Парсинг новостного сайта: https://news.com
- # Парсинг ленты новостей социальной сети: https://facebook.com
- # Парсинг канала мессенджера Telegram: @news_channel_telegram
|