Flyweight method is a Structural Design Pattern that focus on minimizing the number of objects that are required by the program at the run-time. Basically, it creates a Flyweight object which is shared by multiple contexts. It is created in such a fashion that you can not distinguish between an object and a Flyweight Object. One important feature of flyweight objects is that they are immutable. This means that they cannot be modified once they have been constructed.
Why we do care for the number of objects in our program ?
- Less number of objects reduces the memory usage, and it manages to keep us away from errors related to memory
- Although creating an object in Python is really fast, we can still reduce the execution time of our program by sharing objects.
Problem without using Flyweight Method
Imagine you are a game developer who likes Racing Games much and also wants to develop a racing game for you and your friend. As you are a flawless Game developer, you created one and start enjoying the game. Then you sent the game to your friend also but he did not enjoy the game too much because the game kept crashing after every few minutes.
But Why? ( Guess the reason if you think you are a Pro Game Developer).After debugging for several hours, you found that the issue is lack of RAM on your friend’s system. Your system is much powerful as compared to your friend’s system that’s why the game was running smoothly on your system but not on your friend’s system.
Solution using Flyweight Method
so, what will you do as a developer to improve the performance? (of course! not going to upgrade the RAM).The actual problem is related to car objects because each car is represented by separate objects containing plenty of data related to its color, size, seats, maximum speed, etc. Whenever your RAM got filled and unable to add more new objects which are required currently, your game gets crashed. For avoiding such situations in applications, it is the prior duty of the developer to use Flyweight Method which allows you to fit more objects into the available amount of RAM by sharing common parts of the objects.
Following Code is written using the Flyweight method
id = 58598800 ComplexPattern[Audi] id = 58598832 ComplexPattern[Ferrari] id = 58598800 ComplexPattern[Audi]
Following is the class diagram for the Flyweight method
- Reduced use of RAM: when we have a lot of similar objects present in our application, its always better to use Flyweight method inorder to save a lot of space in RAM
- Improved Data Caching: When the need of client or user is High response time, it is always prefered to use Flyweight method because it helps in improving the Data Caching.
- Improved performance: It ultimately leads to improve in performance because we are using less number of heavy objects.
- Breaking Encapsulation: Whenever we try to move the state outside the object, we do breaking of encapsulation and may become less efficient then keeping the state inside the object.
- Hard to handle: Usage of Flyweight method depends upon the language we use, easy to use in language like Python, Java where all object variables are refrences but typical to use in language like C, C++ where objects can be allocated as local variables on the stack and destroyed as a result of programmer action.
- Complicated Code: Using Flyweight method always increases the complexity of the code to understand for the new developers.
- To Reduce the number of Objects: Generally, Flyweight method is used when our application has a lot of heavy weight objects, to solve this proble we use Flyweight method to get rid of unnecessary memory consumption.
- Object independent Applications: When our application if independent of the object created, then we can make use of this method inorder to save lot of machine space.
- Project Cost Reduction: When it is required to reduce the cost of project in terms of space and time complexity, it is always preferred to use the Flyweight method.
Further Read – Flyweight Method in Java
Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.
To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.
- Factory Method - Python Design Patterns
- Observer method - Python Design Patterns
- Composite Method - Python Design Patterns
- Decorator Method - Python Design Patterns
- Abstract Factory Method - Python Design Patterns
- Builder Method - Python Design Patterns
- Singleton Method - Python Design Patterns
- Adapter Method - Python Design Patterns
- Prototype Method - Python Design Patterns
- Bridge Method - Python Design Patterns
- Facade Method - Python Design Patterns
- Proxy Method - Python Design Patterns
- Iterator Method - Python Design Patterns
- Memento Method - Python Design Patterns
- Visitor Method - Python Design Patterns
- Strategy Method - Python Design Patterns
- Template Method - Python Design Patterns
- State Method - Python Design Patterns
- Command Method - Python Design Patterns
- Chain of Responsibility - Python Design Patterns
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.