freeCodeCamp/guide/english/software-engineering/design-patterns/index.md

3.5 KiB

title
Design Patterns

Design Patterns

Programmers and software architects use design patterns to solve common, recurring problems in software architecture. The patterns provide a language-agnostic approach to object-oriented programming that helps developers follow principles of good application design.

Why Design Patterns?

Developing by design patterns offer several advantages:

  • It's easier to follow good programming principles such as the SOLID principles.
  • It keeps code chunks smaller so code is easier to test and debug
  • It helps keep code loosely coupled so code is easier to re-use and update for new applications
  • It makes code easier to understand, so new contributors can ramp up quickly

Using design patterns incurs some trade-offs, and developers new to the practice should remember the following:

  • There are no silver bullets in programming, and design patterns are not an exception
  • Design patterns add a layer of abstraction to code which increases initial design and development effort
  • Over-use of design patterns or forcing them to fit makes code harder to understand

Language Support

Design patterns originated from the world of statically-typed languages like C++, Java, and C#. Most resources about development by design pattern are based in one of these languages.

Nonetheless, design patterns are just that: patterns. They are not implementations, like classes or interfaces, and are not constrained to any one language.

When learning design patterns within a dynamic language, if particular patterns seem needlessly complex or counter-intuitive, recall their origins. Developers in dynamic languages can still use and benefit from following design patterns, although more research may be required to fully understand them.

Uses

Design patterns are excellent at solving foundational coding problems in a simple and repeatable fashion. Broadly, they fall into three categories:

  • Creational patterns describe how to create new objects
  • Structural patterns describe how to compose objects out of other objects
  • Behavioral patterns describe how objects communicate with each other

These tasks can all be performed without design patterns, but design patterns reduce the risk that you will violate good practices and create code that is hard to maintain.

More Information: