享元模式就是重复利用对象,减少对象的生成,jdk中Integer利用了享元模式。下面是享元模式的示例:
package com.djk.design.struct.xiangyuan;
public final class Characters
{
private final String string;
public Characters(String string)
{
super();
this.string = string;
}
public String getString()
{
return string;
}
}
package com.djk.design.struct.xiangyuan;
import java.util.HashMap;
import java.util.Map;
public class FlyWeight
{
private Map<String, Characters> maps = new HashMap<String, Characters>();
public Characters getCharacters (String str) throws CloneNotSupportedException
{
Characters characters = null;
if (null == str || "".equals(str))
{
return characters;
}
if (maps.containsKey(str))
{
characters = maps.get(str);
}else
{
characters = new Characters(str);
maps.put(str, characters);
}
return characters;
}
}
package com.djk.design.struct.xiangyuan;
public class Client
{
public static void main(String[] args) throws CloneNotSupportedException
{
FlyWeight flyWeight = new FlyWeight();
Characters a = flyWeight.getCharacters("a");
Characters aa = flyWeight.getCharacters("a");
System.out.println(a);
System.out.println(aa);
}
}