Design Pattern Examples
Overview of object-oriented design patterns
Flyweight_Exercise Class Reference

Example of using the Flyweight Pattern in C#. More...

Collaboration diagram for Flyweight_Exercise:
Collaboration graph

Public Member Functions

void Run ()
 Executes the example for the Flyweight Pattern in C#.
 

Private Member Functions

int _Flyweight_GenerateBigResource (int numImages, int width, int height)
 Generate a big resource, in this case, a text master "image" of the specified height, containing the specified number of smaller images laid out horizontally, using the given width for each image.
 
List< char[]> _Flyweight_GenerateDisplay (int width, int height)
 Generate a display area in which to render the big resource.
 
void _Flyweight_ShowDisplay (List< char[]> display)
 Render the display to the screen.
 
void _Flyweight_ClearDisplay (List< char[]> display)
 Clear the "display" to a background image, erasing whatever was there before.
 
void _Flyweight_MoveFlyweights (List< Flyweight_Class > flyweightInstances, int display_width, int display_height)
 Move the given flyweight instances within the display, bouncing them off the edges of the display.
 
void _Flyweight_RenderFlyweights (List< Flyweight_Class > flyweightInstances, List< char[]> displayArea)
 Render the image into the display, once for each flyweight instance.
 
double GenerateVelocity (Random randomizer)
 Generate a random velocity, which includes a speed and a direction. The velocity is 0.2 to 1.0 (in increments of 0.2) and the direction is either + or -.
 
List< Flyweight_Class_Flyweight_GenerateFlyweightClasses (int bigResourceId, int numFlyweights, int image_width, int image_height, int display_width, int display_height)
 Helper method to generate the specified number of flyweight class instances and associate those instances with individual contexts and a single big resource.
 

Detailed Description

Example of using the Flyweight Pattern in C#.

The Flyweight pattern is used when a large object needs to be represented by a much lighter weight class, possibly multiple instances of said light-weight class.

In this example, a large object is represented by a so-called "big resource" (a two-dimensional array of text characters) containing multiple images, one associated with each flyweight class. Flyweight classes that represent offset into the big resource, along with position and velocity, are attached to the big resource image so they all share the same image but have different positions and velocities. The image is rendered to a display area through the Flyweight class. The Flyweight class instances then have their positions updated, bouncing off the edges of the display area 60 times a second. This continues for 1000 iterations or until a key is pressed.

Definition at line 31 of file Flyweight_Exercise.cs.

Member Function Documentation

◆ _Flyweight_ClearDisplay()

void _Flyweight_ClearDisplay ( List< char[]>  display)
inlineprivate

Clear the "display" to a background image, erasing whatever was there before.

Parameters
displayA list of character arrays representing the display.

Definition at line 139 of file Flyweight_Exercise.cs.

Referenced by Flyweight_Exercise._Flyweight_GenerateDisplay(), and Flyweight_Exercise.Run().

◆ _Flyweight_GenerateBigResource()

int _Flyweight_GenerateBigResource ( int  numImages,
int  width,
int  height 
)
inlineprivate

Generate a big resource, in this case, a text master "image" of the specified height, containing the specified number of smaller images laid out horizontally, using the given width for each image.

If there are 5 images requested, then create a single image that is 5 * width wide and 1 * height tall.

Parameters
numImagesNumber of images to images to store in the single big resource (horizontally), between 1 and 9.
widthWidth of each "text" image, in characters. Minimum width is 3.
heightHeight of each "text" image, in characters. Minimum height is 3.
Returns
An index to the generated index in the BigResourceManager.

Definition at line 48 of file Flyweight_Exercise.cs.

References BigResourceManager.AddResource().

Referenced by Flyweight_Exercise.Run().

◆ _Flyweight_GenerateDisplay()

List< char[]> _Flyweight_GenerateDisplay ( int  width,
int  height 
)
inlineprivate

Generate a display area in which to render the big resource.

Parameters
widthWidth of the display area.
heightHeight of the display area.
Returns
A List of character arrays representing the display area.

Definition at line 101 of file Flyweight_Exercise.cs.

References Flyweight_Exercise._Flyweight_ClearDisplay().

Referenced by Flyweight_Exercise.Run().

◆ _Flyweight_GenerateFlyweightClasses()

List< Flyweight_Class > _Flyweight_GenerateFlyweightClasses ( int  bigResourceId,
int  numFlyweights,
int  image_width,
int  image_height,
int  display_width,
int  display_height 
)
inlineprivate

Helper method to generate the specified number of flyweight class instances and associate those instances with individual contexts and a single big resource.

The image and display sizes are provided so as to randomize the position of each flyweight within the display.

Parameters
bigResourceIdID of the big resource to use.
numFlyweightsNumber of flyweight instances to create.
image_widthWidth of the big resource image.
image_heightHeight of the big resource image.
display_widthWidth of the display in which the flyweight is to be rendered.
display_heightHeight of the display in which the flyweight is to be rendered.
Returns

Definition at line 253 of file Flyweight_Exercise.cs.

References BigResourceManager.CreateFlyweight(), and GenerateVelocity().

Referenced by Flyweight_Exercise.Run().

◆ _Flyweight_MoveFlyweights()

void _Flyweight_MoveFlyweights ( List< Flyweight_Class flyweightInstances,
int  display_width,
int  display_height 
)
inlineprivate

Move the given flyweight instances within the display, bouncing them off the edges of the display.

The display size and image size are provided here

Parameters
flyweightInstancesList of Flyweight_Class instances to move.
display_widthWidth of display.
display_heightHeight of display.

Definition at line 160 of file Flyweight_Exercise.cs.

References Flyweight_Class.Context, Flyweight_Class.ImageHeight, Flyweight_Class.ImageWidth, Flyweight_Context.Velocity_X, and Flyweight_Context.Velocity_Y.

Referenced by Flyweight_Exercise.Run().

◆ _Flyweight_RenderFlyweights()

void _Flyweight_RenderFlyweights ( List< Flyweight_Class flyweightInstances,
List< char[]>  displayArea 
)
inlineprivate

Render the image into the display, once for each flyweight instance.

Parameters
flyweightInstancesList of Flyweight_Class instances to render.
displayAreaThe "display" in which to render.

Definition at line 210 of file Flyweight_Exercise.cs.

References Flyweight_Class.Context, Flyweight_Class.ImageHeight, Flyweight_Class.ImageWidth, Flyweight_Context.OffsetXToImage, Flyweight_Context.Position_X, Flyweight_Context.Position_Y, and Flyweight_Class.Render().

Referenced by Flyweight_Exercise.Run().

◆ _Flyweight_ShowDisplay()

void _Flyweight_ShowDisplay ( List< char[]>  display)
inlineprivate

Render the display to the screen.

Parameters
displayA list of character arrays representing the display.

Definition at line 119 of file Flyweight_Exercise.cs.

Referenced by Flyweight_Exercise.Run().

◆ GenerateVelocity()

double GenerateVelocity ( Random  randomizer)
inlineprivate

Generate a random velocity, which includes a speed and a direction. The velocity is 0.2 to 1.0 (in increments of 0.2) and the direction is either + or -.

Returns
Returns the velocity.

Definition at line 231 of file Flyweight_Exercise.cs.

◆ Run()


The documentation for this class was generated from the following file: