Question

Where did the idea of design patterns come from, who decided what is and isn't a pattern and gave them their names? Is there an official organisation that defines them, or do they exist through some community consensus?

Was it helpful?

Solution

I think there's a basic "life cycle of a design pattern"

  1. Author writes about design pattern in a book.
  2. Book becomes well read, possibly best seller
  3. Design pattern enters public conscious, gains mindshare.
  4. Design pattern gets used. It works well. design pattern gets more mindshare
  5. Design pattern becomes panacea, gets over-used.
  6. Different Author writes "Design Pattern Considered Harmful"
  7. Design pattern becomes Anti Pattern
  8. Different Author becomes famous, writes book full of new design patterns...

OTHER TIPS

Most people would point to the "Gang of Four" (Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides) who wrote the book Design Patterns: Elements of Reusable Object-Oriented Software. There is no real definitive list as useful design patterns are certainly being discovered all the time.

Wikipedia has a good list. http://en.wikipedia.org/wiki/Design_pattern_(computer_science)

Most are by community consensus (that community being of people who have read design patterns or code complete :/)

Short answer: No.

Long answer: Since if someone designs something, and it tends to be reused by others a new "design pattern" will be just created ( or discovered?? )

Actually the number of design patterns in existing applications might be enormous, but none has classified them yet.

I would add the the previous links these two:

http://martinfowler.com/eaaCatalog/

http://c2.com/ppr/

There's no definitive list. Patterns are discovered, not invented, so there's no organization that can say "this is a pattern" and "this is not a pattern". Even if there were one, it wouldn't be useful for anybody.

Despite that, the "famous" patterns are the ones described in Design Patterns, or the GOF book.

It can also be useful to recognize anti-patterns.

This is a good list of patterns (from the Patterns of Enterprise Application Architecture book):

http://martinfowler.com/eaaCatalog/

The idea of Design Patterns was coined by Christopher Alexander, while writing about architectural patterns within buildings and towns. Similarly, patterns have emerged as engineers have gained more experience with object oriented design methodologies.

There is not one official consortium that defines what is a pattern and what is not a pattern. However, patterns typically have a long lifecycle before they are generally accepted. The development community is beginning to participate in things like PLOP (Pattern Languages of Programs) and their yearly conference: 2008 Conference, which focus on pattern authors and enthusiasts to discuss the subject of patterns and new pattern development.

There is no definitive list - for there to be one would most likely require some authority to declare whether a pattern is a pattern or just a ... something else.

Some patterns make sense only in a subset of languages - the canonical GOF book concentrates on Java (or is it C++? The book's on my desk at the office) and some of the patterns described aren't very relevant in, for example, Ruby or VB6. And vice versa of course.

I would say that the Union of the list in the Gang of Four book and Fowler's Patterns of Enterprise Arhitecture will give you 99% of what you would ever need to know.

There is a canonical book: Gamma, Helm, Johnson, Vlissides: "Dessign Patterns - Elements of Reusable Object-Oriented Software" which started it all. It contains 23 patterns.

There can't be a definitive list. Ever.

If you see some solutions to a problem that -- to you -- have a pattern that can be articulated, you've discovered a design pattern. You can always continue doing this.

Every clever, new solution could be the genesis for a similar solution which shares a common pattern. Patterns are something you use to summarize and capture a cool solution to a problem.

The human brain can find patterns in almost anything. It's a thing we do without thinking about it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top