The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
Декоратор - это один из лучших способов добавить функциональность к объекту, не изменяя его интерфейса. Я часто использую составные декораторы и всегда задаюсь вопросом о том, как правильно их проектировать, когда список функций должен быть настраиваемым. Я не уверен, что у меня есть правильный ответ, но вот некоторая пища для размышлений.
Предположим, у меня есть список чисел:
Теперь я хочу создать список, который будет содержать только нечетные, уникальные, положительные и отсортированные числа. Первый подход - вертикальный (это название я придумал сам):
Второй подход - горизонтальный (опять же, название, которое я придумал):
Видите разницу? Первый подход оформляет ArrayNumbers
“вертикально”, добавляя функциональность через составные декораторы Positive
, Odds
, Unique
и Sorted
.
Второй подход вводит новый интерфейс Diff
, который реализует основную функциональность итерации чисел через экземпляры Positive
, Odds
, Unique
и Sorted
.
Для пользователя numbers
оба подхода одинаковы. Разница только в дизайне. Какой из них лучше и когда? Кажется, вертикальное оформление легче реализовать и более подходит для меньших объектов, которые представляют всего несколько методов.
Что касается моего опыта, я всегда склоняюсь к использованию вертикального оформления, так как его проще реализовать, но в конечном итоге перехожу к горизонтальному, когда количество декораторов начинает расти.
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-16 at 15:24