As the name suggests, it is all about decorating a solid entity.
Why Decorator ?
Let’s see this through an example!
In a game, we created a class Atom. Different atoms have different degree of motion. Say for e.g. :-
Atom 1, has only 1 degree of motion — along x-axis
Atom 2, has 2 degree of motion — along x & y axis
Atom 3, has again 2 degree of motion — along y & z axis
Creating a separate class to handle this would be a tedious task. For e.g. :- MovableX, MovableXZ, MovableYZ … etc.
One alternative is to follow Decorator Pattern. ( Because less code duplication).
Create MovableX, MovableY, MovableZ and then use the combinations to dynamically add additional responsibility to individual atom.
For MovableXY class, we could do create this
IAtom atom_x_y = new MovableX( new MovableY( new Atom() ) )
Implementation in Java:
Yet another different example!
Take the example of a Window View(solid entity). Suppose we have to decorate Window with a new property Scrolling (additional responsibility).
Number of possible combinations(here combination is fine, rather than permutation)→ Horizontal, Vertical, Horizontal_&_Vertical.
Lets see how decorator could be used in this case.
- Create an Interface (code to interface not to implementation)
2. Create a solid entity (Implementing the Interface)
3. Create an Abstract Scrollable Decorator which accommodates the solid entity.
4. Create Decorator Classes from Scroll-Decorator
- window object is present in the Abstract class.
- Scroll logic can be included inside the render().
5. Driver Program
- IWindow is used rather than any Concrete class.
- Note the order, of calling constructors.
Found it Interesting?
Please show your support by 👏. To read the complete series, click below.
I myself, has just started learning, design patterns. If you find any issues please feel free to post them in the comments section below. Thank you for reading so far 😄