Software and Design Patterns

"Design Patterns are general, repeatable solutions to common recurring problems in software development." [From Wikipedia, the free encyclopedia, "Design pattern (computer science)"].

A "pattern" has been defined as "an idea that has been useful in one practical context and will probably be useful in others." [M.Fowler, "Analysis Patterns - Reusable Object Models", Addison Wesley, ISBN 0-201-89542-0].

Some simple patterns can be directly transformed into code. However, do not expect all patterns to be complete solutions! They are helpful descriptions or templates on how to solve a particular problem, you as the programmer must know how and when to use them. In order to do this you must first understand the fundamental concepts of Object Oriented programming: Class, Object, Method, Message passing, Inheritance, Encapsulation, Abstraction and Polymorphism. If any of these concepts are unfamiliar to you please read up on them before continuing with this chapter, you will find references on OO programming at the end of this page.

Well-designed object-oriented systems have multiple patterns embedded in them. These patterns are divided into five categories - Fundamental, Architectural, Creational, Structural, and Behavioral - all of them reinforce as well as complement each other. Usually, patterns inside one category complement eachother because they have the same underlying principles for structuring code.

 

  1. Fundamental Design Patterns are general concepts, they are needed in most other patterns to accomplish their task.
    1. Interface
    2. Container
    3. Delegation
  2. Architectural Patterns express a fundamental structural organization or schema for software systems. They provide a set of predefined subsystems, specify their responsibilities, and include rules and guidelines for organizing the relationships between them.
    1. Model View Controller (MVC)
    2. Dependency Injection
  3. Structural Design Patterns are concerned with how classes and objects are composed together to form larger structures. [GoF, "Design Patterns", Addison Wesley, ISBN 0201633612]
    1. Facade
    2. Decorator
    3. Proxy
    4. Data Access Object
    5. Transfer Object
  4. Creational Design Patterns abstract the instantiation process. They help make a system independent of how its objects are created, composed, and represented. [GoF, "Design Patterns", Addison Wesley, ISBN 0201633612]
    1. Factory Method
    2. Abstract Factory
    3. Objectpool
    4. Singleton
  5. Behavioral Design Patterns are concerned with algorithms and the assignment of responsibilities between objects. [GoF, "Design Patterns", Addison Wesley, ISBN 0201633612]
    1. Iterator
    2. Observer
    3. Event Listener
    4. Strategy

 

Pattern Map

The diagram below shows the relationships between the patterns described in this documentation, the notation is according to Zimmer's classifications and relationships. [Zimmer, Walter (1995), "Relationships between Design Patterns", from "Pattern Languages of Program Design", Addison-Wesley.] There are three types of relationships in this diagram: uses (pattern us used by), combine (pattern can be used by), and similar (patterns are similar in their design).

 

Pattern map according to Zimmer