Layers | Organize components into layers where layer i's services are only used by layer i+1. |
Pipes and Filters | Divide the task into several sequential processing steps -- the output of task i is the input of task i+1. |
Blackboard | Several independent programs work cooperatively on a common data structure. |
Broker | Introduce a broker component to to achieve better decoupling of clients and servers -- brokers accept requests from clients and forward the requests to servers, then return the results back to the clients. |
Model - View - Controller | Divides the application into processing, output, and input. View and controller parts are usually observers of the model via the observer pattern. |
Presentation - Abstract - Control | Divides the application up to heirarchies or MVC-like components. Each component is dependent upon and and provides functionality for the a higher-level component. There is only one top-level component. |
Microkernel | Encapsulate the fundamental services of the application. |
Reflection | Divide the application into a meta-level and a base level to make the application "self-aware". The meta level encapsulates knowledge of the system; the base level encapsulates knowledge about the problem domain. |