Design Patterns    |     Security    |     Testing    |     Distributed Computing    |     Contact



Use sharing to support large numbers of fine-grained objects efficiently.

Class Diagram



  • Flyweight
    • declares an interface through which flyweights can receive and act on extrinsic state.
  • ConcreteFlyweight
    • implements the Flyweight interface and adds storage for intrinsic state, if any. A ConcreteFlyweight object must be sharable. Any state it stores must be intrinsic, that is, it must be independent of the ConcreteFlyweight object's context.
  • UnsharedConcreteFlyweight
    • not all Flyweight subclasses need to be shared. The Flyweight interface enables sharing, but it doesn't enforce it. It is common for UnsharedConcreteFlyweight objects to have ConcreteFlyweight objects as children at some level in the flyweight object structure.
  • FlyweightFactory
    • creates and manages flyweight objects.
    • ensures that flyweight are shared properly. When a client requests a flyweight, the FlyweightFactory objects supplies an existing instance or creates one, if none exists.
  • Client
    • maintains a reference to flyweight(s).
    • computes or stores the extrinsic state of flyweight(s).


  • Reduction in the number of objects to handle.
  • Reduction in memory and storage devices if the objects are persisted.


  • when the application uses large number of objects.
  • Storage costs are high because of the quantity of objects.
  • The application doesn't depend on object identity.