# Patterns

## What

* Patterns are just a common solution, to a common problem using a ubiquitous language
  * ease to describe and discuss them
  * patterns can be the same, but be different in terms of their aims
* Patterns occurs not just object oriented code, but in other areas see Types of patterns
  * patterns can language specific, ie see effective java by Bloc
* In essence, they are used to make code more changeable.
* Depending on the language used, or libraries, or tech, these will either implement these patterns (fill in the gaps) or make them redundant

## Types of patterns

* code
  * functional
  * oo
* language specific
* integration
* module
* architectural
* database
* tests
* ops - CI, deployments, platform, builds,
* workflow
* concurrency
* enterprise
* front end
* security
* Debugging
* team patterns
  * conventions
* department patterns

## Issues

* people can be over eager, in implementing patterns, when they are not needed
* Only use them if they improve some aspect (NFR) which is needed
* patterns over usage can increase complexity for no reason

### links

* <https://www.quora.com/A-senior-software-engineer-in-our-team-told-me-that-the-popularity-of-design-patterns-has-led-to-a-kind-of-pattern-abuse-and-over-designing-by-novice-programmers-what-does-he-mean>
*

## Links

* <https://java-design-patterns.com/patterns/>
* <https://dzone.com/articles/design-patterns-in-the-age-of-microservices-and-frameworks>

## Updated for java 8

* <https://www.infoq.com/news/2022/10/modern-java-design-patterns/>
