單純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:
復(fù)合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: //復(fù)合享元(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: