amarao: (Default)
[personal profile] amarao
Главная боль с ними - это отсутствие нормальной документации.

Я только что хотел показать человеку "adapter". Казалось бы, пять строчек. Всё, что я нашёл - это какая-то бездна, и мой мозг стекает ещё до того, как я заканчиваю читать. Я понимаю паттерн, я не понимаю, что эти авторы хотят сказать.

Или, фабрика. Тривиальная же вещь: верни функцию с замыканием вместо значения. Но нет, всё, что идёт в статьях со словом "pattern", кажется, написано людьми, которые *любят* xml, писают кипятком от синтаксиса java и хочень бы хотели xlst вот ту вот очаровательную soap.

... Отсюда, вопрос, а есть ли кто-то, кто этим вопросом занимался и кто бы написал вменяемый обзор? Я понимаю, что у разных языков программирования разный уровень бойлерплейта (builder pattern для Rust/Java - это база и так и надо, в питоне можно, но будет выглядеть странно, потому что в аргументах можно много и выразительно варьироваться), но всё-таки, самый базовый простой обзор? Желательно, без махрового ООП.

Date: 2022-07-05 03:43 pm (UTC)
sab123: (Default)
From: [personal profile] sab123
Фабрику проще всего понимать как виртуальный конструктор - она производит объекты с типом некоего родительского класса, которые являются на самом деле объектом некоего подкласса.

Ну и вообще, по уму не люди для паттернов, а паттерны для людей. Не нужно писать программы "вот тут мы поставим такой паттерн, там - эдакий паттерн". Нужно писать программы "тут мы сделаем вот так, потому что оно следует из логики нужного - о, да это же получается паттерн Х, значит надо обратить внимание на то и это, типичное для такого паттерна".

Что не так с изначальной книжкой? (Ну, кроме того, что она не объясняет "паттерны для людей").

Date: 2022-07-07 12:08 am (UTC)
sab123: (Default)
From: [personal profile] sab123
Это странная фабрика, в расширенном толковании этого понятия, и с ипользованием функциональных подходов. Она производит функции. Которые, конечно, можно при желании тоже рассматривать как объекты, но можно и без этого обойтись.

Классическая фабрика - именно виртуальный конструктор.

Date: 2022-07-07 04:44 pm (UTC)
sab123: (Default)
From: [personal profile] sab123
Ну так в расширенном толковании все, что возвращает некие объекты, которые поддерживают определенный интерфейс, но внутри неким образом преконфигурированные - фабрика. Если функции - объекты, то то, что их создает - фабрика. Если классы - тоже объекты, то то, что их создает - фабрика.

Но это непростые примеры. Для них функции и классы должны быть нетривиальными, поддерживающими объектный интерфейс. Чтобы посмотреть, как выглядит внутри функция-как-объект, посмотрите на функторы в C++. Вкратце, их интерфейс заключается в наличии перегруженного оператора () с некоей ожидаемой сигнатурой (как это нынче называется по-русски?). Точно так же, класс-как-объект можно описать как имеющий интерфейс в виде функции (или нескольких функций с разными аргументами), которая конструирует объекты - угу, виртуальный конструктор. То есть, этот класс является по сути фабрикой (ну да, фабрика в фабрике). Ну, плюс можно конечно добавить некие "статические методы", но потребность в фабрикации классов - не в них, а в "фабрике в фабрике".

Все это гораздо сложнее и запутаннее для объяснения, чем классический вариант. И понимание этих сложных вариантов требует сначала понимания простого классического варианта (что, наверное, эта дискуссия тоже демонстрирует).

Возврат callable - это вообще ситуация, где можно легко обойтись без фабрик. Можно просто вместо фабрики передавать функцию, которая будет каждый раз вызываться с полным набором параметров. Фабрика тут дает оптимизацию, когда некое повторно используемое подмножество параметров можно пред-обработать один раз и потом запомнить в обработанном виде для последующих вызовов.

Profile

amarao: (Default)
amarao

February 2026

S M T W T F S
123456 7
8910111213 14
15161718192021
22232425262728

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 25th, 2026 06:03 pm
Powered by Dreamwidth Studios