单纯fly weight
1: //抽象享元角色 2: abstract public class Flyweight 3: { 4: abstract public void operation(String state); 5: } 6:1: //具体享元(ConcreteFlyweight)角色 2: public class ConcreteFlyweight extends Flyweight 3: { 4: private Character intrinsicState = null; 5: 6: public ConcreteFlyweight(Character state) 7: { 8: this.intrinsicState = state; 9: } 10: 11: public void operation(String state) 12: { 13: System.out.print( "/nIntrinsic State = " + intrinsicState + 14: ", Extrinsic State = " + state); 15: } 16: } 17:
1: //享元工厂(FlyweightFactory)角色 2: import java.util.Map; 3: import java.util.HashMap; 4: import java.util.Iterator; 5: 6: public class FlyweightFactory 7: { 8: private HashMap flies = new HashMap(); 9: /** 10: * @link aggregation 11: * @directed 12: * @clientRole Flyweights 13: */ 14: private Flyweight lnkFlyweight; 15: 16: public FlyweightFactory(){} 17: 18: public synchronized Flyweight factory(Character state) 19: { 20: if ( flies.containsKey( state ) ) 21: { 22: return (Flyweight) flies.get( state ); 23: } 24: else 25: { 26: Flyweight fly = new ConcreteFlyweight( state ); 27: flies.put( state , fly); 28: return fly; 29: } 30: } 31: 32: public void checkFlyweight() 33: { 34: Flyweight fly ; 35: int i = 0; 36: 37: System.out.println("/n==========checkFlyweight()============="); 38: for ( Iterator it = flies.entrySet().iterator() ; it.hasNext() ; ) 39: { 40: Map.Entry e = (Map.Entry) it.next(); 41: System.out.println("Item " + (++i) + " : " + e.getKey()); 42: } 43: System.out.println("==========checkFlyweight()============="); 44: } 45: 46: } 47: 1: 2: //客户端(Client)角色 3: public class Client 4: { 5: private static FlyweightFactory factory; 6: 7: static public void main(String[] args) 8: { 9: factory = new FlyweightFactory(); 10: 11: Flyweight fly = factory.factory(new Character('a')); 12: fly.operation("First Call"); 13: 14: fly = factory.factory(new Character('b')); 15: fly.operation("Second Call"); 16: 17: fly = factory.factory(new Character('a')); 18: fly.operation("Third Call"); 19: 20: // intrinsic Flyweight 21: factory.checkFlyweight(); 22: } 23: } 24:
复合fly weight
1: //抽象享元角色 2: abstract public class Flyweight 3: { 4: abstract public void operation(String state); 5: }
1: //具体享元(ConcreteFlyweight)角色 2: public class ConcreteFlyweight extends Flyweight 3: { 4: private Character intrinsicState = null; 5: 6: public ConcreteFlyweight(Character state) 7: { 8: this.intrinsicState = state; 9: } 10: 11: public void operation(String state) 12: { 13: System.out.print( "/nInternal State = " + 14: intrinsicState + " Extrinsic State = " + state ); 15: } 16: } 17:
1: //复合享元(UnsharableFlyweight)角色 2: import java.util.Map; 3: import java.util.HashMap; 4: import java.util.Iterator; 5: 6: public class ConcreteCompositeFlyweight extends Flyweight 7: { 8: private HashMap flies = new HashMap(10); 9: 10: /** 11: * @link aggregation 12: * @directed 13: * @clientRole Composite 14: */ 15: private Flyweight flyweight; 16: 17: public ConcreteCompositeFlyweight() 18: { 19: } 20: 21: public void add(Character key, Flyweight fly) 22: { 23: flies.put(key, fly); 24: } 25: 26: public void operation(String extrinsicState) 27: { 28: Flyweight fly = null; 29: 30: for ( Iterator it = flies.entrySet().iterator() ; it.hasNext() ; ) 31: { 32: Map.Entry e = (Map.Entry) it.next(); 33: fly = (Flyweight) e.getValue(); 34: 35: fly.operation(extrinsicState); 36: } 37: } 38: } 39: 1: //享元工厂(FlyweightFactory)角色 2: import java.util.Map; 3: import java.util.HashMap; 4: import java.util.Iterator; 5: 6: public class FlyweightFactory 7: { 8: private HashMap flies = new HashMap(); 9: /** 10: * @link aggregation 11: * @directed 12: * @clientRole Flyweights 13: */ 14: private Flyweight lnkFlyweight; 15: 16: public FlyweightFactory(){} 17: 18: public Flyweight factory(String compositeState) 19: { 20: ConcreteCompositeFlyweight compositeFly = new ConcreteCompositeFlyweight(); 21: 22: int length = compositeState.length(); 23: Character state = null; 24: 25: for(int i = 0; i < length; i++) 26: { 27: state = new Character(compositeState.charAt(i) ); 28: System.out.println("factory(" + state + ")"); 29: compositeFly.add( state, this.factory( state) ); 30: } 31: return compositeFly; 32: } 33: 34: public Flyweight factory(Character state) 35: { 36: if ( flies.containsKey( state ) ) 37: { 38: return (Flyweight) flies.get( state ); 39: } 40: else 41: { 42: Flyweight fly = new ConcreteFlyweight( state ); 43: flies.put( state , fly); 44: return fly; 45: } 46: } 47: 48: public void checkFlyweight() 49: { 50: Flyweight fly ; 51: int i = 0 ; 52: 53: System.out.println("/n==========checkFlyweight()============="); 54: for ( Iterator it = flies.entrySet().iterator() ; it.hasNext() ; ) 55: { 56: Map.Entry e = (Map.Entry) it.next(); 57: System.out.println( "Item " + (++i) + " : " + e.getKey()); 58: } 59: System.out.println("/n==========checkFlyweight()============="); 60: } 61: 62: } 63:
1: //客户端(Client)角色 2: public class Client 3: { 4: private static FlyweightFactory factory; 5: 6: public static void main(String[] args) 7: { 8: factory = new FlyweightFactory(); 9: 10: Flyweight fly; 11: /* fly = factory.factory(new Character('a')); 12: fly.operation(); 13: 14: fly = factory.factory(new Character('b')); 15: fly.operation(); 16: 17: fly = factory.factory(new Character('a')); 18: fly.operation(); 19: */ 20: fly = factory.factory("abc"); 21: fly.operation("Composite Call"); 22: 23: // intrinsic Flyweight 24: factory.checkFlyweight(); 25: } 26: } 27: 28: 29: 30: