Bridge Design Pattern Example

Bridge Design Pattern Summary:
The Bridge pattern is a structural design pattern that helps in decoupling an abstraction from its implementation, so that the two can vary independently. In this example, the abstraction is the Shape class, and the implementation is the DrawAPI class. We've used the Bridge pattern to separate the shape abstraction (Circle and Square) from its implementation details (color and size).

Pros:
- Decouples an abstraction from its implementation, making them more flexible.
- Improves code maintainability by allowing changes to one part without affecting the other.
- Encourages the use of composition over inheritance, leading to a cleaner and more modular codebase.

Cons:
- Increases complexity due to the introduction of additional classes and interfaces.
- Can be hard to understand for new developers, especially when overused or used unnecessarily.