Select Page

Flyweight

Flyweight

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

Source Code

/**  * Declares an interface through which flyweights can receive and act on  * extrinsic state.  *   * @role __Flyweight  */ public interface Flyweight { 	void sampleOperation(FlyweightContext context); }  /**  * Represents extrinsic state of flyweight(s).  *   * @role __State  */  public interface FlyweightContext { }  /**  * Implements the Flyweight interface and adds storage for intrinsic state, if  * any. Objects of this class must be sharable. Any state it stores must be  * intrinsic (independent of this object's context)  */  public class ConcreteFlyweight implements Flyweight { 	public ConcreteFlyweight(Object key) { 		// initialize internal state 	}  	/** @see patterns.gof.flyweight.Flyweight#sampleOperation(FlyweightContext) */ 	public void sampleOperation(FlyweightContext context) { 		// provide implementation here 	} }  /**  * Creates and manages flyweight objects. Ensures that flyweights are shared  * properly. When a client requests a flyweight, this factory supplies an  * existing instance or creates one, if none exists.  *   * @role __Factory  */  public class FlyweightFactory { 	private HashMap flyweight;  	public FlyweightFactory() { 		flyweight = new HashMap(); 	}  	public Flyweight getFlyweight(Object key) { 		if (flyweight.containsKey(key)) { 			return (Flyweight) flyweight.get(key); 		} else { 			Flyweight newFlyweight = new ConcreteFlyweight(key); 			flyweight.put(key, newFlyweight); 			return newFlyweight; 		} 	}  	/** 	 * @return new instance ofunshared flyweight 	 */ 	public Flyweight getUnsharedConcreteFlyweight() { 		return new UnsharedConcreteFlyweight(); 	} }  /**  * Not all Flyweight subclasses need to be shared  */  public class UnsharedConcreteFlyweight implements Flyweight { 	/** @see patterns.gof.flyweight.Flyweight#sampleOperation(FlyweightContext) */ 	public void sampleOperation(FlyweightContext context) { 		// provide implementation here 	}  } 
0 0 votes
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments

Categories

0
Would love your thoughts, please comment.x
()
x