# Java: Patterns

- patternshare.org - A growing site of patterns by the typicall suspects: Flowler, GoF, ... It looks like this may become a major resource on patterns.
- Wikipedia provides a good starting point for patterns: Design pattern.
- http://wiki.java.net/bin/view/Javapedia/Patterns
- www.exciton.cs.rice.edu/JavaResources/DesignPatterns/default.htm - Good descriptions of many design patterns.
- http://www.artima.com/lejava/articles/gammadp.html How to use Design Patterns, Erich Gamma is interviewed by Bill Venners.
- www.patternscentral.com - Not sure how useful this is, but I've found some good links here.
- community.java.net/patterns/ has some useful links.

## The Model-View-Controller design pattern

Separation of a program into twp parts, the user interface and the logic is a common technique for reducing coupling. A further refinement is to separate the user interface into two aspects - the view, which more or less corresponds to the output, and the controller, which more or less corresponds to the input. The logic in often called the model. Organizing a program this is referred to as the Model-View-Controller design pattern.

The problem with MVC is that it is not entirely clear. For example, you will find many references to www.roguewave.com/products/whitepapers/mvcwp.pdf, Distributed MVC, but this article in itself casts doubt on the clarity of the concept. Eg,

> "In the interest in preserving generality, the core MVC definition leaves a lot unspecified or open to interpretation. Because of this, many developers find MVC difficult to understand and apply. Often, developers come away with subtle - and sometimes not so subtle - differences in interpretation and application of the paradigm."

More sources of information, including links, can be found at c2.com/cgi/wiki?ModelViewControllerAsAnAggregateDesignPattern, Model View Controller As An Aggregate Design Pattern, and ootips.org/mvc-pattern.html, Model-View-Controller.

Other patterns are sometimes suggested as replacements for MVC, for example Document-View, or Model-View-Presenter. Not that these are entirely clear.

Another similar approach is described in Data Models for Desktop Apps, using JavaBeans and events/listeners to separate the GUI portion.

### Webliography

- www.cs.indiana.edu/~cbaray/projects/mvc.html, the model-view-controller (MVC) design pattern
- www.enode.com/x/markup/tutorial/mvc.html, Model-View-Controller Pattern
- www.churchillobjects.com/c/14058.html, Model-View-Controller Pattern - good.
- exciton.cs.oberlin.edu/JavaResources/DesignPatterns/MVC.htm, Model-View-Controller - My style. Lots of other patterns too.
- today.java.net/pub/a/today/2003/12/11/mvc.html, Beyond MVC: A New Look at the Servlet Infrastructure by N Alex Rupp has the history of MVC.
- c2.com/cgi/wiki?AntiPatternsCatalog - Anti Patterns Catalog
- www.patternscentral.com/modules.php?name=Sections