Software Patterns

(or how not to re-invert the wheel)

One of the things that make experience developers more productive than novices is have seen and solved many problems before. After seeing the same problems over and over again, one builds a library of solutions that work. The Design Pattern movement (if one can call it such) is an attempt to write down and diseminate the well-known techniques and patterns. one of the seminal works in the area is Design Patterns Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (The Gang of Four).

This lecture covers rapidly a number of common solutions or models for program development. Some of these are reflected in the Design Pattern book, other represent higher-level architecture models. The purpose is to give a survey of some of the tools in an experienced developers toolkit.

Data Structures

We will start with a brief survey of basic data structures. The efficient implementation of data structures is a topic for an algorithm course. What we are concerned with here in the interfaces the structures represent. If you have a situation that calls for one of these interfaces, you are in luck. Many man-years of effort has been put into efficient solutions.

Creation Patterns

Creation patterns deal with how to create and assemble objects. Some examples

Interface Patterns

Control Patterns

String Processing

Arctitectural Patterns:Small Scale

Arctitectural Patterns:Large Scale


This is a sampling of the more useful design patterns and programming paradigms in common use. The best way to learn more is to study theory, read programs, and write programs. The books on design patterns are of some use, but there is no substitute for trying things out.