Prepared By : Hasnaeen Rizvi RahmanAstha School of Advanced Computing
Use sharing to support large number of fine-grained objects efficiently.
An application uses many objects. A flyweight is a shared object that can be used in multiple contexts simultaneously. It acts as an individual object in each context. The key concept is the distinction between intrinsic and extrinsic state.
An application uses a large number of objects. Storage costs are high because of the sheer quantity of objects. Most objects state can be made extrinsic. Many groups of objects may be replaced by relatively few shared objects once extrinsic state is removed. The application doesn’t depends on object identity.
Flyweight (Glyph) • Declare an interface through which flyweights can receive and act on extrinsic state. ConcreteFlyweight (Character) • Implements the Flyweight interface and adds storage for intrinsic state, if any. UnsharedConcreteFlyweight (Row,Column) • Not all flyweight subclasses need to be shared. Flyweight Factory • Creates and manages flyweight objects. • Ensures that flyweights are shared properly. Client • Maintains a reference to flyweights • Computes or stores the extrinsic state of flyweight.
Client passes extrinsic state to flyweight. Client invokes FlyweightFactory to create Flyweight object.
Flyweight may introduce run-time cost. Storage savings are a function of several factors: • The reduction in the total number of instances that comes from sharing. • The amount of intrinsic state per object. • Whether extrinsic state is computed or stored.
Design an application which stores list of entities. • Entity: It has an ID, Name and an attribute. • Attribute: Attributes are composite data where each attribute is either a leaf or a composite. It has all child management operation suggested in composite pattern. A leaf attribute have a name and value. A Composite attribute have a name but no value. Attribute returns an XML having Name and Value node. The composite attribute returns the list of child attribute XML.