Паттерн Декоратор — специальный способ организации модулей в программе, который позволяет подставить какую-то новую функцию прямо в середину цепочки вызовов, тем самым чуть-чуть подкорректировав поведение.
Например, в реальном мире очки для чтения это декоратор. Вы ставите их между вашими глазами и текстом. Глобально взаимодействие ваших глаз и текста не меняется: отражённые световые лучи от страницы книги попадают в ваши зрачки, что с очками, что без них. Но очки располагаются посередине: они принимают лучи на вход и преломляют их, передавая дальше вам в глаза уже изменёнными.
Важной особенностью является тот факт, что очки можно снять. Они не требуют ни модификации вашего тела, ни модификации книги. Вообще никакие условия не нужны, кроме наличия самих очков. А если вы в линзах, то внешний наблюдатель может даже этого не знать.
Класс-декоратор должен быть спроектирован так, чтобы не требовать никаких изменений в объектах, с которыми он работает. Его можно отключить, чаще всего буквально закомментировав одну строку.
В примере ниже программа выведет текст "Привет, мир, в натуре.", и вот это дополнение в конце как раз дописано декоратором. Можно убрать или закомментировать подчёркнутую строчку, не трогая остальной код, для всех внешних вызовов сигнатуры останутся теми же самыми, но выводиться будет уже просто "Привет, мир".
В декораторы можно прятать логику, которую буквально навешивают поверх основной функции программы. Например, проверку прав на выполнение операции. Перевод на другой язык, логирование, поддержку обратной совместимости при обновлении и так далее.
#dev
Valentine's Day Messages:
.1All I wanted was someone to care for me,
All I wanted was someone who'd b there for me,
All I ever wanted was someone who'd b true,
All I ever wanted was someone like You!
Happy Valentine's Day!
2.A day filled with kisses, a week filled with romance, a month filled with love, a year filled with bliss and a lifetime filled with happy memories. I want to spend the rest of my life with you.
Happy Valentine’s Day!
3.Darling, my love for you is as deep as the sea and as high as the sky. Happy Valentine’s Day!
When I look at you, I’m amazed by your beauty, both on the outside and the inside. Happy Valentine’s Day!
4.I still remember the moment when our eyes met for the first time. I felt butterflies in my stomach and since then my heart longs to be with you always. Be mine forever!
5.A day without you is a day without a sun, a night without a moon; a life without meaning.
6.Happy Valentine’s Day to the most special person in my life. You are my love, my heart and my joy.
#Messages
#Teamjimmy
#sirjimmy
@translobot
Qué puede hacer este bot?
Este es un bot traductor
Translo le permite traducir mensajes a más de 90 idiomas.
Idioma: Múltiple
(visto en @BotsGram_cu)
#translate, #suggest, #translation, #messages, #command, #english
@GitHubBot
Qué puede hacer este bot?
Este es un bot de GitHub. Puede notificarle sobre eventos en sus repositorios públicos de GitHub. También puede responder a tus mensajes para publicar comentarios en GitHub directamente desde Telegram.
Idioma: Inglés
(visto en @BotsGram_cu)
#telegram, #notify, #events, #github, #delete, #public, #command, #messages, #repository
@YTranslateBot
Qué puede hacer este bot?
Este bot traduce desde cualquier idioma a tu lenguaje nativo en el chat
(visto en @BotsGram_cu)
#translate, #yandex, #free, #suggest, #translation, #messages, #command, #remember, #english
@junction_bot
Qué puede hacer este bot?
Este bot puede recopilar publicaciones de tus canales favoritos de Telegram, para que puedas leerlas como un servicio de noticias.
¡También puede copiar mensajes entre canales y bots, filtrar anuncios, modificar mensajes y mucho más!
Idioma: Inglés, Ruso, Turco
(visto en @BotsGram_cu)
#link, #word, #project, #feed, #messages, #group, #subscription, #telegram, #share, #channel, #questions, #command, #inline, #join, #twitter, #favorite, #collect, #news, #enter, #place, #free, #message, #welcome