Vertical and Horizontal Decorating

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

sixnines availability badge   GitHub stars