Code Design
Courses and Workshops on Effective Code Design

Design Patterns Explained

Florin Coroș

Florin Coroș


By participating to this training you will get a deep understanding of the most common object oriented design patterns. You will understand how to use the Design Patterns to structure your code in a way that you will enjoy working on it, long after the first lines were written in your project. You will also see how knowing design patterns helps in getting better ideas on how to reach a better design for your code, a higher maintainability, reusability and extensibility.

This course explains the design patterns from the perspective of real life projects. It focuses on minimizing the cost of change of the code we are writing, by doing a code design that embraces change. It does so, by discussing for each pattern its intent, its applicability and the most important aspects that need to be considered when tweaking the pattern to a very specific context. It also shows code examples on how the patterns were implemented in different projects and on how patterns can be combined among them and with other design principles or practices.

Each pattern describes a problem that occurs over and over again in our environment, and then it describes the core of the solution to that problem. It does it in a way that you can use the solution million times over and over again, without ever doing it the same way twice. Therefore, knowing these patterns and how to tweak and combine them in a particular implementation is one of the conditions of being able to write quality code.


You should invest in understanding Design Patterns and their utility because:

  • you get better and more ideas on how to model a particular technical problem
  • you can reuse and apply design ideas which are proven to be effective
  • you can get to a more appropriate granularity of your classes that model a particular domain
  • you will find less obvious abstractions and the objects that can capture them

Once you understand the design patterns and have had an "Aha!" (and not just a "Huh?") experience with them, you won't ever think about object-oriented design in the same way. You will have insights that can make your own designs more flexible, modular, reusable, and understandable—which is why you're interested in object-oriented technology in the first place. Having someone with the experience of reasoning about patterns while writing code to teach you, may get you to such understanding faster.

Target Audience

Any software architect and software developer would benefit greatly from this training.


Object Oriented Programming basics (inheritance; encapsulation; polymorphism; interfaces; abstract classes; virtual methods; overriding; overloading).

Format and Agenda

The training takes the most used patterns from the book “Design Patterns, Elements of Reusable Object Oriented Software” and discusses them. Each pattern is presented using the same structure: Intent, Usage Examples, Generic Structure, Applicability, Collaborations, Considerations and Code Samples.

The patterns that are usually discussed are:

  • Abstract Factory
  • Factory Method
  • Builder
  • Adapter
  • Template Method
  • Decorator
  • Composite
  • Façade
  • Observer
  • Strategy
  • Chain of Responsibility
  • Visitor
  • Memento

The recommended format for delivering the course of one full day. This assures a balanced pace between explaining each pattern, showing examples and discussing different implementations. There is also the possibility to tailor the content based on your needs.


Please contact me for requesting an offer tailored to your needs.


The course contains the best patterns to use in most of the real life projects. It is a good shortcut towards good code that can be maintained and reused.

Mircea Blaga
Product Architect

You've successfully subscribed to Code Design
Great! Next, complete checkout to get full access to all premium content.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Success! Your billing info is updated.
Error! Billing info update failed.