Вот различия, основанные на реальной реализации.
Декорирование - альтернативный способ подклассификации для расширения функциональности существующих классов.Вот некоторый сценарий, в котором мы должны использовать подклассификацию или декоратор.
1) Подклассификация, в основном, используется в случае расширения функциональности аналогичной группы классов, которая хочет сохранить старые функциональные возможности, а также новые вподклассы и все экземпляры подклассов имеют одинаковую функциональность.Если мы внесем изменения в дочерние классы, и тогда это отразит все исходные классы дочерних классов. Например, иерархическая связь, похожая группа классов.
Parent-> Child-> GrandSon.
Car-> Maruti 800-> Maruti 100 (будет иметь функцию Maruti 800, а также New)
2) Шаблон декоратора используется для украшения существующих классов без изменения старого поведения. Такой каккруг класса имеет простую границу, но нам нужно украсить его красной рамкой, через некоторое время какой-то пользователь хочет круг с желтым цветом, а другой пользователь хочет круг с зеленой рамкой, а другой пользователь хочет красный и желтый круг, а другой пользователь хочет красную и зеленую рамкукруг и т. д., для этого это идеальный шаблон, так как он не уменьшает количество классов комбинации. Ниже приведен пример.
Icircle cir = новый RedDecorator (новый круг ()), украшающий круг красным цветом
Icircle cir = новый YellowDecorator (новый круг ()), украшающий круг желтым цветом
Icircle cir = новый RedDecorator (новый YellowDecorator (новый кружок ())), украшающий круг
красным и желтым, здесь нам не нужно создавать декоратор класса RedAndYellow.таким же образом мы можем украсить круг другим набором комбинаций, не создавая новый набор классов комбинации.
Таким образом, это уменьшает количество классов комбинации.
Вот полезная ссылка для шаблона декоратора
https://www.tutorialspoint.com/design_pattern/decorator_pattern.htm