设计模式之旅9--享元模式

2018-07-18  本文已影响157人  小楠总

1. 定义

享元模式:使用共享对象可以有效地支持大量的细粒度的对象。

享元模式

2. 使用场景

3. 实现

抽象与具体的享元角色如下:

public abstract class Flyweight {

    //内部状态,可以共享的信息,存储在对象内部并且不会随环境改变
    private String mIntrinsic;

    //外部状态,不可以共享的信息,随着环境的改变而改变,是对象的索引值
    protected final String mExtrinsic;

    public Flyweight(String extrinsic) {
        mExtrinsic = extrinsic;
    }
}

public class ConcreteFlyweight extends Flyweight {
    
    public ConcreteFlyweight(String extrinsic) {
        super(extrinsic);
    }
    
}

享元工厂如下:

public class FlyweightFactory {

    //池容器
    private static Map<String, Flyweight> sPool = new HashMap<>();

    /**
     * 通过外部状态结合池来管理对象
     * @param extrinsic
     * @return
     */
    public static Flyweight getFlyweight(String extrinsic) {

        Flyweight result = null;

        if (sPool.containsKey(extrinsic)) {
            result = sPool.get(extrinsic);
        } else {
            result = new ConcreteFlyweight(extrinsic);
            sPool.put(extrinsic, result);
        }

        return result;
    }

}

4. 优点

5. 缺点

上一篇 下一篇

猜你喜欢

热点阅读