设计模式之享元模式在handler中的运用

享元模式的基本定义和用法:

简说设计模式——享元模式

在使用handler的时候发现,创建message对象有两种方式,一种是直接new,一种是使用Message.obtain(),这个message的静态方法是这样实现的:

private static final Object sPoolSync = new Object();
    private static Message sPool;
    private static int sPoolSize = 0;

    private static final int MAX_POOL_SIZE = 50;

    private static boolean gCheckRecycle = true;

    /**
     * Return a new Message instance from the global pool. Allows us to
     * avoid allocating new objects in many cases.
     */
    public static Message obtain() {
        synchronized (sPoolSync) {
            if (sPool != null) {
                Message m = sPool;
                sPool = m.next;
                m.next = null;
                m.flags = 0; // clear in-use flag
                sPoolSize--;
                return m;
            }
        }
        return new Message();
    }

从全局池返回一个新的消息实例。取到的话就返回,没有的话就新建一个。允许我们在许多情况下避免分配新对象。就是在复用之前用过的 Message 对象,这里实际上是用到了一种享元设计模式,这种设计模式最大的特点就是复用对象,避免重复创建导致的内存浪费。

猜你喜欢

转载自blog.csdn.net/anhenzhufeng/article/details/88991219