When reading different books or articles on software patterns, you will notice that there are different and sometimes contradictory proposals on how to organize these patterns. Pragmatically I added patterns to all potential categories

I reused some category proposals from books and finally came up with the following results:

  1. Overall System Structure: Patterns to structure systems or large components. Sometimes named From Mud to Structure, for example: Layers, Tiers, Master/Slave, Client/Server, Domain-Model, Transaction-Script, Virtual Machine.

  2. Data flow: Pipes-and-Filter and its variants, Blackboard

  3. Interactive Systems: Model-View-Controller, Model-View-ViewModel and their variants

  4. Integration Patterns: Publish-Subscribe, Messaging, Remote-Procedure-Call, Hub-and-Spoke etc.

  5. Adaptive Systems: PlugIn, Broker, MicroServices

  6. Domain Patterns: Open-Host-Service, Published-Language, Anticorruption-Layer, Separate-Ways

  7. Stability and Robustness Patterns: Bulkhead, Timeout, Circuit-Breaker, Heartbeat, Handshake etc.

  8. Resource Management Patterns: Patterns for resource acquisition (lookup, lazy/eager or partial acquisition), handling resource lifecycle (caching, pooling, coordination) and others.

  9. Workflow Patterns: TODO

  10. Security Patterns: TODO

  11. Microservice Patterns: TODO

  12. Design Patterns: Fine-grained patterns, often associated with class or object structure, behavior or creation. I concentrate on those which are independend of the underlying programming paradigm, e.g. Proxy, Adapter, Facade, Registry, Command, Observer