美文网首页设计模式
享元模式(Flyweight)

享元模式(Flyweight)

作者: 剑道_7ffc | 来源:发表于2020-04-23 15:50 被阅读0次

    一句话总结

    共享对象

    内容

    本质是通过缓存来达到对象的共享,从而降低内存的消耗。类似于线程池,主要解决同一个对象频繁的创建和销毁。

    场景

    房源共享等

    类图

    代码示例

    // 抽象享元角色
    public interface IFlyweight {
        void operation(String extrinsicState);
    }
    // 具体享元角色
    public class ConcreteFlyweight implements IFlyweight {
        private String intrinsicState;
        public ConcreteFlyweight(String intrinsicState) {
            this.intrinsicState = intrinsicState;
        }
        public void operation(String extrinsicState) {
            System.out.println("Object address: " + System.identityHashCode(this));
            System.out.println("IntrinsicState: " + this.intrinsicState);
            System.out.println("ExtrinsicState: " + extrinsicState);
        }
    }
    // 享元工厂
    public class FlyweightFactory {
        private static Map<String, IFlyweight> pool = new HashMap<String, IFlyweight>();
        // 因为内部状态具备不变性,因此作为缓存的键
        public static IFlyweight getFlyweight(String intrinsicState) {
            if (!pool.containsKey(intrinsicState)) {
                IFlyweight flyweight = new ConcreteFlyweight(intrinsicState);
                pool.put(intrinsicState, flyweight);
            }
            return pool.get(intrinsicState);
        }
    }
    public class Test {
        public static void main(String[] args) {
            IFlyweight flyweight1 = FlyweightFactory.getFlyweight("aa");
            IFlyweight flyweight2 = FlyweightFactory.getFlyweight("bb");
            flyweight1.operation("a");
            flyweight2.operation("b");
        }
    }
    

    在源码时的应用

    Integer类中

        public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }
    

    相关文章

      网友评论

        本文标题:享元模式(Flyweight)

        本文链接:https://www.haomeiwen.com/subject/zkjaihtx.html