Я думаю, классическим примером является то, что класс Window может иметь декоратор Border и декоратор ScrollBar в книге GoF.
В каких ситуациях вы думаете, знаете, в которых Pattern Decorator действительно решает проблему?
Я использовал шаблон Decorator для управления сложными ролями.
Пример с макушки моей головы:
public abstract class DecoratedUser : User { protected User _decoratedUser; public DecoratedUser(User decoratedUser) { _decoratedUser = decoratedUser; } public abstract List<Permissions> GetPermissions; } public EditorUser : DecoratedUser { public EditorUser(User decoratedUser) : base(decoratedUser) {} public override List<Permissions> GetPermissions { // return previous permissions + editor permissions } } public ModeratorUser : DecoratedUser { public ModeratorUser(User decoratedUser) : base(decoratedUser) {} public override List<Permissions> GetPermissions { // return previous permissions + moderator permissions } }
Все, что абстрагируемо до расширяемого корня, для которого вы должны определить различные перекрывающиеся и взаимозаменяемые поведения:
и так далее ...
Пакет java.io .