А я бы не стал так кнопки делать, сделал бы лучше как в WPF, хоть это и заняло бы больше времени. На С++ и того проще, все решается множественным наследованием и стратегиями поведения.
Вы не решите эту проблему множественным наследованием. Про это я писал в описании. Точнее решите, породив кучу классов. При этом, если понадобится какое-либо изменение одного декоратора, вам понадобится менять все классы. А декоратором может быть даже и не десять.
В случае применения паттерна «Декоратор» Вам нужно будет лишь изменить один класс.
И да. Питон поддерживает множественное наследование. Поэтому язык тут не причем.
На счёт WPF. Именно в нём паттерн декоратор используется очень плотно, и очень многие встроенные возможности WPF сделаны как паттерн декоратор. В частности в механизм Addorner-ов.
Автору спасибо. Хоть и знаком с предметом, но всё равно интересно!
объясни мне зачем в имени интерфейса использовать слово Abstract, а потом писать:
>AbstractBlockDectorator — абстрактный класс декоратора блоков. Обратите внимание, что это именно абстрактный
>класс, а не интерфейс.
не стОит запутывать людей.
Замечательная статья. Спасибо. Как раз разбиралась с этим шаблоном. Теперь буду реализовывать! Надеюсь, что получиться. На первый взгляд, вроде, все не так уж и сложно..)
Паттерн проектирования «Декоратор» / «Decorator»