In this course, we will discuss what are structural design patterns. We will get a high level overview of what are these patterns and we will see why it is important to have these patterns. Later on, we will do a deep dive in these patterns and go through all the design patterns which are part of these categories.
- Adapter
- Bridge
- Composite
- Decorator
- Proxy
- Facade
- Flyweight
We will discuss all these patterns mentioned above in a great detail, and we will code along and understand what problems they are solving.
Links to source code is provided at the bottom of the introduction section.
Let's get started!
- Be able to do basic coding in Java
- Basic familiarity with Object oriented programming
- Think about the design choices in a better way
- Be able to code a efficient and cleaner solutions for commonly known problems
- Be confident at understanding and explaining Structural Design Patterns
- Be able to come up with a well thought design for the problem in hand
- Be able to communicate well in design discussions and convey ideas fluently within team
Adapter is a structural design pattern that allows objects with incompatible interfaces to collaborate.
Bridge is a structural design pattern that lets you split a giant class or a set of closely related classes into two separate hierarchies, abstraction and implementation, which can be developed independently of each other.
Composite is a structural design pattern that lets you compose objects into tree structures and allow clients to work with these structures as if they were individual objects.
Decorator is a structural design pattern that lets you attach new behaviours to objects by placing them inside wrapper objects that contain these behaviours.
Facade is a structural design pattern that lets you provide a simplified interface to a complex system of classes, library or framework.
Proxy is a structural design pattern that lets you provide a substitute or placeholder for another object to control access to it.
Flyweight is a structural design pattern that lets you fit more objects into the available amount of RAM by sharing common parts of object state among multiple objects, instead of keeping it in each object.