This is a factory of factory design pattern for creating objects. Where an abstract factory and color and shape interface is used.
To allow a unique instance for the class
Use the interface and abstract class to design a combinaiton of components/n The implementaiton of the components is hidden to the client, the comibination is provided through the interface
Use the adapter interface to connect two independent or incompatible interface
Use the bridge interface to create abstract super class(interface) that can have different objects
This structral design pattern combine multiple criteria together using interface
The composite pattern has a concrete class with a list of the same class as a field, so that a tree like strucutre
Provide an interface to the client that hides the complexities of the system
Provide an interface from the proxy, the proxy represents functionality of another class.
Use iterator class to hide information about the properties of the iterating items
Provide way to evaluate language grammar or expression