Each window system provides operations for drawing primitive shapes, iconifying/de-iconifying, resizing, and refreshing window contents. An abstract base codice_4 class can be derived to the different types of existing windows, such as application, iconified, dialog. These classes will contain operations that are associated with windows, such as reshaping, graphically refreshing, etc. Each window contains elements, whose codice_5 functions are called upon by the codice_4's own draw-related functions. In order to avoid having to create platform-specific Window subclasses for every possible platform, an interface will be used. The codice_4 class will implement a codice_4 implementation (codice_9) abstract class. This class will then in turn be derived into multiple platform-specific implementations, each with platform-specific operations. Hence, only one set of codice_4 classes are needed for each type of codice_4, and only one set of codice_9 classes are needed for each platform (rather than the Cartesian product of all available types and platforms). In addition, adding a new window type does not require any modification of platform implementation, or vice versa. This is a Bridge pattern. codice_4 and codice_9 are different, but related. codice_4 deals with windowing in the program, and codice_9 deals with windowing on a platform. One of them can change without ever having to modify the other. The Bridge pattern allows these two "separate class hierarchies to work together even as they evolve independently" (p.54). All actions the user can take with the document, ranging from entering text, changing formatting, quitting, saving, etc.  Problems and Constraints   Solution and Pattern  Each menu item, rather than being instantiated with a list of parameters, is instead done with a "Command" object. Command is an abstract object that only has a single abstract codice_17 method. Derivative objects extend the codice_17 method appropriately (i.e., the codice_19 would utilize the content's clipboard buffer). These objects can be used by widgets or buttons just as easily as they can be used by menu items. To support undo and redo, codice_20 is also given codice_21 and codice_22. In derivative classes, the former contains code that will undo that command, and the latter returns a boolean value that defines if the command is undoable. codice_22 allows some commands to be non-undoable, such as a Save command.