大话设计模式笔记 享元模式

享元模式(Flyweigh),运用共享技术有效地支持大量细粒度的对象。

 

package flyweight;

//可以接受并作用于外部状态
public abstract class Flyweight {
    public abstract  void operation(int extrinsicState);

}

 

package flyweight;

//为内部状态增加存储空间
public class ConcreteFlyweight extends Flyweight{

    @Override
    public void operation(int extrinsicState) {
        System.out.println("ConcreteFlyweight"+extrinsicState);
    }

}

 

package flyweight;

//不需要共享的子类
public class UnsharedConcreteFlyweight extends Flyweight {

    @Override
    public void operation(int extrinsicState) {
        System.out.println("UnsharedConcreteFlyweight"+extrinsicState);
    }

}

 

package flyweight;

import java.util.HashMap;

public class FlyweightFactory {
    private HashMap<String, Flyweight> flyweightMap=new HashMap<String, Flyweight>();

    public FlyweightFactory() {
        flyweightMap.put("X", new ConcreteFlyweight());
        flyweightMap.put("Y", new ConcreteFlyweight());
        flyweightMap.put("Z", new ConcreteFlyweight());
    }

    public Flyweight getFlyweightMap(String key) {
        return flyweightMap.get(key);
    }
    
    public static void main(String[] args) {
        int extrinsicState=22;
        
        FlyweightFactory flyweightFactory=new FlyweightFactory();
        
        Flyweight flyweight=flyweightFactory.getFlyweightMap("X");
        flyweight.operation(--extrinsicState);
        
        Flyweight flyweight2=flyweightFactory.getFlyweightMap("Y");
        flyweight.operation(--extrinsicState);
        
        Flyweight flyweight3=flyweightFactory.getFlyweightMap("Z");
        flyweight.operation(--extrinsicState);
        
        UnsharedConcreteFlyweight unsharedConcreteFlyweight=new UnsharedConcreteFlyweight();
        unsharedConcreteFlyweight.operation(--extrinsicState);
        
    }
    
}

 

享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的,有时就能够大幅度地减少需要实例化的类的数量,如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。

 

posted @ 2015-10-10 20:18  郁闷紫番薯  阅读(216)  评论(0编辑  收藏  举报