運用共享技術有效地支持大量細粒度的對象
享元模式共享的關鍵是區分內蘊狀態(Internal state)和外蘊狀態(external state)。
內蘊狀態是存儲在享元對象內部不會改變的,可以共享。
外蘊狀態是隨環境改變的,不可以共享的狀態。它可以改變方法的行為。
abstract public class Flyweight
{
//state外蘊狀態,改變方法的行為
abstract public void operation(String state);
}
public class ConcreteFlyweight extends Flyweight
{
private Character instrinsicState=null;
public ConcreteFlyweight(Character state)
{
this.instrinsicState=state;
}
public void operation(String state)
{
System.out.print("\nInstrinsic State="+instrinsicState+",Extrinsic State = "+state);
}
}
public class FlyweightFactory
{
private HashMap flies=new HashMap();
//根據內蘊狀態構造對象
public Flyweight factory(Character state)
{
if(flies.containKey(state))
{
return (Flyweight)flies.get(state)
}
else
{
Flyweight fly=new ConcreteFlyweight(state);
flies.put(state,fly);
return fly;
}
}
public state void main(String[] args)
{
FlyweightFactory factory=new FlyweightFactory();
Flyweight fly=factory.factory(new Character('a'));
fly.operation("First call");
Flyweight fly2=factory.factory(new Character('b'));
fly2.operation("Second call");
Flyweight fly3=factory.factory(new Character('a'));
fly3.operation("Third call");
}
}