From 8be1a12072c8002271834929eeb4ad5300a4f607 Mon Sep 17 00:00:00 2001 From: Braydie Grove Date: Fri, 15 Jan 2016 15:55:30 +0000 Subject: [PATCH] Create 09-Design Patterns.md --- 2-Intermediate/Judgment/09-Design Patterns.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 2-Intermediate/Judgment/09-Design Patterns.md diff --git a/2-Intermediate/Judgment/09-Design Patterns.md b/2-Intermediate/Judgment/09-Design Patterns.md new file mode 100644 index 0000000..53991d3 --- /dev/null +++ b/2-Intermediate/Judgment/09-Design Patterns.md @@ -0,0 +1,30 @@ +# Design Patterns + +Design Patterns can be seen as repeatable solutions to common problems arising in software design. They provide a great, language-agnostic +way of talking about software architecture. + +"Head First Design Patterns" explains simply: + +> Design patterns don't go directly into your code, they first go into your BRAIN. Once you've loaded your brain with good working +knowledge of patterns you can start to apply them to your new designs + +There are a number of benefits to considering using a design pattern: + +- Helps your system prepare for accommodating change - an inevitability of software development +- Allows for a shared language when describing a system - you can "say more with less" +- Can lead to a better designed system (through *appropriate use* of a design pattern) + +There are 23 'Gang of Four' patterns that are generally considered the foundation for all other patterns. They are categorised into three groups: Creational, Structural and Behavioural. + +## Criticisms + +[SourceMaking](https://sourcemaking.com/design_patterns) highlights some of the criticisms of using design patterns: + + - Targets the wrong problem + - Lacks formal foundations + - Leads to inefficient solutions + - Does not differ significantly from other abstractions + + +Some argue that design patterns ultimately boil down to good software design with careful consideration of SOLID principles. + [Jeff Atwood also has some thoughts on design patterns](http://blog.codinghorror.com/rethinking-design-patterns/)