Frills and thrills – the decorator pattern
We need to add the functionality whereby animals get inoculated by a vet. Also, an animal should be inoculated only once. In practice, we would normally inoculate them at intervals. However, we simplify things to make our point. We want to wrap the logic "if already inoculated, then skip" without touching the animal code. The decorator pattern now comes to our rescue.
A decorator is a design pattern that wraps an object. It mimics the interface of the object that it is decorating. Here is the Java code in which we will look at how Scala makes the pattern easy and breezy.
The Java listing here has just the necessary changes. Refer to the book source code for the complete listing:
public class AnimalDecorator extends Animal { // 1 protected Animal animal; // 2 public AnimalDecorator(Animal animal) { this.animal = animal; } public void getInoculated() { animal.getInoculated(); // 3 // delegate to next decorator // or animal } ...