享元模式(Flyweight):能够避免大量很是类似类的开销。在程序设计中,有时须要生成大量细粒度的类实例来表示数据。若是能发现这些事例除了几个参数外基本相同的,有时就可以大幅度的减小须要实例化的类的数量。java
若是能把哪些参数移到类事例的外面,在方法调用的时候将他们传递进来,就能够经过共享大幅度的减小单个实例的数目ide
package com.fumeck.design.flyweight; public abstract class FlyWeight { private String name; public FlyWeight(String name) { this.name = name; } public abstract void excute(); }
package com.fumeck.design.flyweight; public class ConcreteFlyWeight extends FlyWeight{ public ConcreteFlyWeight(String name) { super(name); } @Override public void excute() { //具体事件 } }
package com.fumeck.design.flyweight; import java.util.HashMap; import java.util.Map; public class FlyWeightFactory { private Map<String, FlyWeight> map = new HashMap(); public FlyWeight getFlyWeight(String name) { FlyWeight flyWeight = map.get(name); if (flyWeight != null) { return map.get(name); } else { flyWeight = new ConcreteFlyWeight(name); map.put("name", flyWeight); return flyWeight; } } }