Mid GoF Patterns

Extending the Pattern:?

  • The Flyweight Pattern could be extended to support composite objects

where each flyweight can contain references to other flyweights. For example,

a complex character (e.g., with styling information) could consist of several

flyweight components (like the base character, font style, size, etc.).

Visual Diagram:

+---------------------------+

| CharacterFactory |

| (Flyweight Factory) |

+---------------------------+

+---------------------------------------------+

| |

+------------------+

+------------------+

| Character | | Character

| <--- Flyweight Objects

| (Intrinsic State)| | (Intrinsic

State)|

+------------------+

+------------------+

| |

| * Shared across all objects |

Follow:

+--------------------------------------------------->+

(Position, Size, Text displayed are external/unique)

(Memory saved by sharing the intrinsic state)

Conclusion:

The Flyweight Pattern provides a powerful way to manage large numbers of similar objects

efficiently by sharing common state and minimizing memory usage. It’s particularly beneficial

in scenarios like text rendering, game graphics, or large-scale simulations where creating

numerous identical objects would be costly in terms of memory and performance. By

applying this pattern, you can significantly reduce the memory footprint and improve the

performance of your application while maintaining flexibility in managing the objects' unique

properties.

Interpreter Pattern: Real-Time Example - Parsing and Evaluating

Mathematical Expressions

Definition:

The Interpreter Pattern defines a representation for a grammar along with an interpreter to

interpret sentences in that grammar. It is used to evaluate expressions or interpret complex

languages by breaking them down into simpler components that can be recursively

evaluated.

Use Case:

A typical use case for the Interpreter Pattern is parsing and evaluating mathematical

expressions, like addition, subtraction, multiplication, or division. It allows for flexible and

dynamic evaluation of complex expressions.

Code Explanation:

More from Design Patterns in C#

All questions for this course