1. 程式人生 > >java設計模式之享元模式Flyweight

java設計模式之享元模式Flyweight

package com.javapatterns.flyweight.simple;

public class Client
{
private static FlyweightFactory factory;

static public void main(String[] args)
{ 
factory = new FlyweightFactory();

Flyweight fly = factory.factory(new Character('a'));
fly.operation("First Call");

fly = factory.factory(new Character('b'));
fly.operation("Second Call");

fly = factory.factory(new Character('a'));
fly.operation("Third Call");

factory.checkFlyweight();
} 
}
 
 
package com.javapatterns.flyweight.simple;

import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;

public class FlyweightFactory
{
private HashMap flies = new HashMap();

private Flyweight lnkFlyweight;

public FlyweightFactory(){}

public synchronized Flyweight factory(Character state)
{ 
if ( flies.containsKey( state ) )
{
return (Flyweight) flies.get( state );
}
else
{
Flyweight fly = new ConcreteFlyweight( state );
flies.put( state , fly);
return fly;
}
}

public void checkFlyweight()
{ 
Flyweight fly ;
int i = 0;

System.out.println("\n==========checkFlyweight()=============");
for ( Iterator it = flies.entrySet().iterator() ; it.hasNext() ; )
{
Map.Entry e = (Map.Entry) it.next();
System.out.println("Item " + (++i) + " : " + e.getKey());
}
System.out.println("==========checkFlyweight()=============");
}

}
 
 
 




package com.javapatterns.flyweight.simple;

public class ConcreteFlyweight extends Flyweight
{

private Character intrinsicState = null;

public ConcreteFlyweight(Character state)
{ 
this.intrinsicState = state;
}

public void operation(String state)
{ 
System.out.print( "\nIntrinsic State = " + intrinsicState +
", Extrinsic State = " + state);
}
}
 
 



package com.javapatterns.flyweight.simple;

abstract public class Flyweight
{
abstract public void operation(String state);
}
 
 
 


複合享元模式:

image

從圖上理解是比較容易的,但書中的程式碼著實讓人暈的很,索性先跳過。