Your class project is the delivery of an executable software system that makes use of at least three patterns.  You must choose from a minimum of one architectural pattern that we cover, and two design patterns.  For your design patterns, you must choose at least one from the design patterns we cover in class.  The second design pattern can be selected either from those covered in class, or from any published design pattern in either Gamma, et. al. or Buschmann, et. al.

You should produce a project proposal for review by me by November 11th.  The project proposal will specify a particular business problem that you are solving, and will list the patterns involved in your proposed solution to the problem, with a brief discussion of how these patterns participate in an intelligent solution to the original problem.  Allowing me to review your project concept will give you the goahead for proceeding.  You should come up with a legitimate business concept that will benefit from your selection of patterns.  That is to say, your pattern selection should all fit together to solve some legitimate business need.  In short, come up with an interesting problem, and solve it using the available patterns.

Some example project ideas:

One might select the Blackboard pattern as the architectural pattern, and then write a GUI interface using the Model-View-Controller pattern, and then integrate that with the State pattern.  The controlling business idea here might be a simple stock analysis program.

Or, one might select the Broker as the architectural pattern, and then write a simple gui (or none at all), and integrate in to the system implementations of the Visitor and Iterator patterns.  The controlling business idea here might be any application that deals with dynamic structures (composites) of things.

Or, one might choose the Layers architectural pattern, and produce a simple system built on a layered architecture that also incorporates Singletons and the Bridge pattern.  The controlling business idea here might be any application that deals with a need for dynamic versions of things.