@borisalekseev
extra beginner junior python backend

Зачем нужна фабрика классов?

Когда применяется паттерн "фабрика классов"? Когда читал объяснение, не понял чем
это

class Song:
    def __init__(self, song_id, song_title):
        self.id = song_id,
        self.title = song.title


class SongSerializer:
     def serialize(self, song, format):
        if format == 'JSON':
            return json.dumps({'id': song.id, 'title': song.title})
        elif:
......
        else:
            raise ValueError(format)


лучше чем
это

class Song:
    def __init__(self, song_id, song_title):
        self.id = song_id,
        self.title = song.title
     def serialize(self, format):
        if format == 'JSON':
            return json.dumps({'id': self.id, 'title': self.title})
        elif:
......
        else:
            raise ValueError(format)

  • Вопрос задан
  • 631 просмотр
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Преимущества второго над первым три.
1. Разделение ответственности: класс отвечает за организацию памяти, а сериализатор — за сохранение-запись.
2. Продуманный наружный интерфейс: сложно сделать «класс в себе», который позволяет тянуть данные из JSON, но такую же функциональность для XML сделать уже невозможно. Как вы понимаете, программист всегда лавирует между трёх огней: одна крайность — позволить программисту «напортачить» и сделать так, чтобы song.records[] и record.tracks[] были не согласованы. Вторая — сделать «класс в себе», где шаг влево, шаг вправо — шаблон «Public Морозов». Третья — не обеспечить производительность: без record.tracks[] никуды, а вот без song.records[] можно и пожить, но как искать в коллекции пластинок нужную песню — ХЗ.
3. Когда, помимо песен, на пластинках могут быть лекции и танцы, но мы коллекционируем Битлов, мы не обязаны тащить в EXE-файл то, на что не подписывались. Или большинство текстовых форматов сериализации тяжелы — в Питоне-то они сидят прямо в библиотеке и на это забить, она всегда есть, а вот в Си++ обычно где-то в EXE-файле.

Главный недостаток второго над первым: когда, помимо песен, на пластинках могут быть лекции и танцы, виртуальный полиморфизм проще и ошибкобезопаснее.

И ещё: это НЕ фабрика классов. Фабрика классов начинается, когда…
1. Эту штуку нужно ДЕсериализовать.
2. И не просто десериализовать, а на пластинках могут быть песни, лекции, танцы — например, при тэге «song» мы делаем песню, при тэге «lecture» лекцию…
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы