The Flyweight pattern aims to reduce memory usage by sharing common parts of objects instead of creating many similar objects.
Click to reveal answer
intermediate
In the Flyweight pattern, what are intrinsic and extrinsic states?
Intrinsic state is the shared, unchanging data stored inside the flyweight. Extrinsic state is the unique data passed from outside when using the flyweight.
Click to reveal answer
intermediate
How does the Flyweight pattern improve system scalability?
By sharing common data among many objects, it reduces memory consumption, allowing the system to handle more objects efficiently.
Click to reveal answer
beginner
Give a real-life example that illustrates the Flyweight pattern.
Imagine a text editor where each letter shares the same font style and size (intrinsic state), but their position on the screen (extrinsic state) is unique. This sharing saves memory.
Click to reveal answer
intermediate
What is a common structure used to manage flyweight objects?
A Flyweight Factory is used to create and manage flyweight objects, ensuring shared objects are reused instead of duplicated.
Click to reveal answer
What does the Flyweight pattern primarily help to reduce?
ANetwork latency
BMemory usage
CCPU usage
DDatabase size
✗ Incorrect
The Flyweight pattern reduces memory usage by sharing common parts of objects.
Which state in the Flyweight pattern is shared among objects?
ADynamic state
BExtrinsic state
CIntrinsic state
DTemporary state
✗ Incorrect
Intrinsic state is the shared, unchanging data stored inside the flyweight.
What role does the Flyweight Factory play?
ACreates new unique objects every time
BHandles user authentication
CDeletes unused objects immediately
DManages and reuses shared flyweight objects
✗ Incorrect
The Flyweight Factory manages and reuses shared flyweight objects to save memory.
Which scenario best fits the Flyweight pattern?
AMany objects with identical data
BFew objects with unique data
CObjects with no shared data
DObjects that never change
✗ Incorrect
Flyweight is best when many objects share identical data to reduce memory use.
In the text editor example, what is an example of extrinsic state?
ALetter position on screen
BFont style
CFont size
DCharacter shape
✗ Incorrect
Letter position is unique and passed externally, so it is extrinsic state.
Explain the Flyweight pattern and how it helps save memory in software systems.
Think about sharing common parts of objects instead of duplicating.
You got /4 concepts.
Describe the role of a Flyweight Factory and why it is important.
Consider how objects are created and reused.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of the Flyweight pattern in system design?
easy
A. To encrypt data for security
B. To save memory by sharing common parts of objects
C. To improve network communication speed
D. To create new objects for every request
Solution
Step 1: Understand the Flyweight pattern goal
The Flyweight pattern focuses on reducing memory usage by sharing common data among many objects.
Step 2: Compare options with the pattern goal
Only To save memory by sharing common parts of objects matches the purpose of saving memory by sharing parts of objects.
Final Answer:
To save memory by sharing common parts of objects -> Option B
Quick Check:
Flyweight = Memory sharing [OK]
Hint: Flyweight shares data to save memory, not speed or security [OK]
Common Mistakes:
Confusing Flyweight with caching or encryption
Thinking Flyweight creates new objects each time
Mixing Flyweight with network optimization
2. Which of the following is the correct way to separate intrinsic and extrinsic state in a Flyweight object?
easy
A. Store shared data inside the Flyweight and pass unique data externally
B. Do not separate data; treat all data as shared
C. Keep all data inside the Flyweight object
D. Store unique data inside the Flyweight and shared data outside
Solution
Step 1: Recall Flyweight data separation
Flyweight stores intrinsic (shared) data internally and receives extrinsic (unique) data externally.
Step 2: Match options with this rule
Store shared data inside the Flyweight and pass unique data externally correctly states shared data inside Flyweight and unique data passed externally.
Final Answer:
Store shared data inside the Flyweight and pass unique data externally -> Option A
Quick Check:
Intrinsic inside, extrinsic outside [OK]
Hint: Flyweight holds shared data; unique data comes from outside [OK]
Common Mistakes:
Putting unique data inside Flyweight causing duplication
Not separating data leading to memory waste
Confusing intrinsic and extrinsic states
3. Consider this simplified Flyweight usage in code:
class TreeType:
def __init__(self, name, color):
self.name = name
self.color = color
class TreeFactory:
_tree_types = {}
@classmethod
def get_tree_type(cls, name, color):
key = (name, color)
if key not in cls._tree_types:
cls._tree_types[key] = TreeType(name, color)
return cls._tree_types[key]
# Usage
factory = TreeFactory()
t1 = factory.get_tree_type('Oak', 'Green')
t2 = factory.get_tree_type('Oak', 'Green')
t3 = factory.get_tree_type('Pine', 'Green')
print(t1 is t2, t1 is t3)
What will be the output?
medium
A. True False
B. False True
C. True True
D. False False
Solution
Step 1: Understand object sharing in factory
The factory returns the same TreeType object for identical (name, color) keys, so t1 and t2 share the same object.
Step 2: Compare object identities
t1 is t2 will be True because they share the same instance; t1 is t3 will be False because 'Pine' differs from 'Oak'.
Final Answer:
True False -> Option A
Quick Check:
Shared keys = same object [OK]
Hint: Same key returns same object, different key returns new object [OK]
Common Mistakes:
Assuming all objects are different
Ignoring the factory cache
Confusing identity (is) with equality (==)
4. In this Flyweight implementation snippet, what is the main error?
class Flyweight:
def __init__(self, shared_state):
self.shared_state = shared_state
class FlyweightFactory:
def __init__(self):
self._flyweights = {}
def get_flyweight(self, shared_state):
if shared_state not in self._flyweights:
self._flyweights[shared_state] = Flyweight(shared_state)
return self._flyweights[shared_state]
medium
A. Creating new Flyweight every time
B. Not storing unique data inside Flyweight
C. Using mutable type as dictionary key without hashing
D. Missing constructor in Flyweight class
Solution
Step 1: Identify dictionary key usage
The code uses shared_state as a dictionary key, but if shared_state is a mutable type like a list or dict, it cannot be used as a key.
Step 2: Understand dictionary key requirements
Dictionary keys must be immutable and hashable; using mutable types causes runtime errors.
Final Answer:
Using mutable type as dictionary key without hashing -> Option C
Quick Check:
Dict keys must be immutable [OK]
Hint: Dict keys must be immutable; mutable keys cause errors [OK]
Common Mistakes:
Ignoring type of shared_state as dict key
Assuming Flyweight always stores unique data
Overlooking constructor presence
5. You are designing a text editor that displays millions of characters. Each character has a font style and color (shared), and a position (unique). How would you apply the Flyweight pattern here to optimize memory?
hard
A. Store position inside Flyweight and font/color externally
B. Store all data inside Flyweight objects without separation
C. Create a new object for every character without sharing
D. Create a Flyweight object for each unique character with its font and color, pass position externally
Solution
Step 1: Identify intrinsic and extrinsic data
Font style and color are shared (intrinsic), position is unique (extrinsic) for each character.
Step 2: Apply Flyweight pattern correctly
Create Flyweight objects for shared font and color, pass position externally when rendering characters.
Final Answer:
Create a Flyweight object for each unique character with its font and color, pass position externally -> Option D
Quick Check:
Shared data in Flyweight, unique data outside [OK]
Hint: Flyweight holds shared style; position passed externally [OK]
Common Mistakes:
Putting position inside Flyweight causing many objects
Not sharing font and color data
Ignoring separation of intrinsic and extrinsic data
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.