-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #78 from braydie/section-design-patterns
Create 09-Design Patterns.md
- Loading branch information
Showing
1 changed file
with
30 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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/) |