Frameworks vs. Patterns, Pattern Selection, and the Lexi Document Editor Case Study

This section covers the distinction between frameworks and design patterns, practical strategies for selecting and applying patterns, and begins an extended case study designing a WYSIWYG document editor called Lexi. The case study demonstrates how design problems naturally lead to specific patterns — Composite for document structure and Strategy for formatting algorithms.

Key Concepts

Commands and Syntax

Glyph interface (C++):


// Appearance
virtual void Draw(Window*);
virtual void Bounds(Rect&);
// Hit detection
virtual bool Intersects(const Point&);
// Structure
virtual void Insert(Glyph*, int);
virtual void Remove(Glyph*);
virtual Glyph* Child(int);
virtual Glyph* Parent();

Compositor interface:


void SetComposition(Composition*);    // what to format
virtual void Compose();               // when to format

Steps to apply a design pattern:

1. Read pattern once for overview (focus on Applicability and Consequences)

2. Study Structure, Participants, and Collaborations

3. Study Sample Code

4. Choose meaningful names for participants in your application context

5. Define classes, interfaces, inheritance, instance variables

6. Define application-specific operation names

7. Implement operations per responsibilities and collaborations

Relationships

Exam-Relevant Points