SIGN UP MEMBER LOGIN:    
ARTICLE

Flyweight Pattern

Posted by Nitin Mittal Articles | .NET 4.5 November 29, 2011
Flyweight is an object that minimizes memory by sharing data as much as possible with other similar objects.
Reader Level:

Problem: Designing objects down to the lowest levels of system "granularity" provides optimal flexibility, but can be unacceptably expensive in terms of performance and memory usage.

Purpose of Flyweight Pattern

  • Reduce storage costs for a large number of objects.
  • Share objects to be used in multiple contexts simultaneously.
  • Retain object oriented granularity and flexibility

What is the Flyweight Pattern

A flyweight is an object that minimizes memory by sharing data as much as possible with other similar objects.

The Flyweight pattern describes how to share objects to allow their use at fine granularities without prohibitive cost.

Each "flyweight" object is divided into two pieces: the state-dependent (extrinsic) part, and the state-independent (intrinsic) part. Intrinsic state is stored (shared) in the Flyweight object. Extrinsic state is stored or computed by client objects, and passed to the Flyweight when its operations are invoked.

Flyweight is appropriate for small, fine-grained classes like individual characters or icons on the screen.

Example:

Each character in a word document is represented as a single instance of a character class, but the positions where the characters are drawn on the screen are kept as external data. In this case, there only has to be one instance of each character, rather than one for each appearance of that character.

Flyweight uses in C#

If there are two instances of a String constant with identical characters, they could refer to the same storage location.

Implementing the Pattern

A school wants to print its student info (Student Name, Roll Number, School Name, School Address, Pin, and Country) where student name and roll numbers are different and all other things are the same for each student

Flyweight Pattern.cs

using System;
using System.Collections.Generic;
using System.Text;
 
namespace ConsoleDesignPattern
{
 
    class
Students  //Flyweight Class
    {
         public string schoolName =
"Delhi Public School";
         public string schoolAddress = "Mathura Road, Delhi";
         public string strPin = "01";
         public string strCountry = "India";
           
         void PrintStudentInfo(string studentName, string rollNumber)
         {
              Console.WriteLine(studentName + rollNumber + schoolName + schoolAddress + strPin + strCountry);

              Console.ReadLine();
         }
     }
}

Program.cs


class MainApp
{
     public static void Main()
     {
          // Implementing Flyweight Pattern (only one object is created for all students which will reduce memory usage)
          Students flyWeightClient = new Students();
          flyWeightClient.PrintStudentInfo("Nitin Mittal", "153551");
          flyWeightClient.PrintStudentInfo("Tom", "153550");
     }
}

Login to add your contents and source code to this article
share this article :
post comment
 
Team Foundation Server Hosting
Become a Sponsor
PREMIUM SPONSORS
  • Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites - Click Here!
Team Foundation Server Hosting
Become a Sponsor