Decorator
pattern is about decorating ( enhancing ) an object with additional features at runtime.
Suppose you already have a class, lets call it class A
which implements an interface IA
. Now if there is a requirement of adding an additional feature for which we want it to have a method ,someAlignFeatureToA()
which was not there in A
. Now you have an option of extending the class A
. Another approach is Composition
which should be favoured over Inheritance
. You can wrap the object of class A
in another class B
implwmenting the same Interface
as of A
i.e. IA
. This way for the client code it would be easy to accept the object of class B as it has the same interface as of A. (Assumption is the code is well written which depends on the Abstractions (interface IA
) and not on concrete classes like class A
).
This way the inheritance chain is not too long and you can add additional features at runtime easily.
Now coming to your question : Yes in the example you took in your question, a List fits better, but I feel its the intention of the author to explain usuage of Decorator pattern with an easy example.
Suppose Coffee is made up of milk, coffee mix and sugar. Coffee mix is further made up of smaller components . Here the solution emerges similar to Composite pattern.
Decorator pattern is design pattern based on Enhancement of Behavior. Java IO streams uses this where behavior (method implementation) is enhanced by the decorating class (one stream is wrapped with another to enhance the previous one)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…