
/**
* 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
}
}
Privacy Statement | Copyright Notice | Licenses
© 1999-2012 Waltercedric.com. Designed by Cédric Walter. Sitemap
Reproduction without explicit permission is prohibited. All Rights Reserved. All photos remain copyright © their rightful owners. No copyright infringement is intended.
Disclaimer: The editor(s) reserve the right to edit any comments that are found to be abusive, offensive, contain profanity, serves as spam, is largely self-promotional, or displaying attempts to harbour irrelevant text links for any purpose.