享元模式是池技术的重要实现方式,它可以减少应用程序创建的对象,降低程序内存的占 用,提高程序的性能。
抽象享元角色
public interface IGoods {
void showGoodsPrice(String name);
}
具体享元角色
public class Goods implements IGoods {
// 内部状态
private String name;
public Goods(String name) {
this.name = name;
}
@Override
public void showGoodsPrice(String version) {
if(version.equals("32G")){
System.out.println("价格为 5199 元");
}else if(version.equals("128G")){
System.out.println("价格为 5999 元");
}
}
}
享元工厂
public class GoodsFactory {
private static Map<String,Goods> pool=new HashMap<String, Goods>();
public static Goods getGoods(String name){
if (pool.containsKey(name)){
System.out.println("使用缓存,key 为:"+name);
return pool.get(name);
}else{
Goods goods = new Goods(name);
pool.put(name,goods);
System.out.println("创建商品,key 为:"+name);
return goods;
}
}
}
客户端调用
public static void main(String[] args) {
Goods goods1=GoodsFactory.getGoods("iphone7");
goods1.showGoodsPrice("32G");
Goods goods2=GoodsFactory.getGoods("iphone7");
goods2.showGoodsPrice("32G");
Goods goods3=GoodsFactory.getGoods("iphone7");
goods3.showGoodsPrice("128G");
}
使用场景:
- 系统中存在大量的相似对象。
- 需要缓冲池的场景。