设计模式二:享元模式(Flyweight Pattern)

设计模式——享元模式

1、享元模式的定义

享元模式:享元模式(FlyweightPattern)即共享对象的模式。在实际业务场景中,经常出现这样的一种情况——一个对象的属性值从对象被创建出来后基本就是不变的,并且在很多地方都需要使用到这个对象,此时就可以考虑使用享元模式了!享元模式主要解决的就是减少相同对象的创建,以便节省内存空间,从而提高系统的性能。使用享元模式时,如果需要某一个对象,那么就会尝试找到可以重用的对象,如果没有找到的话就会创建出这样的一个对象并返回,同时将创建的对象保存起来,以便下一次需要相同的对象的时候直接返回,这样就可以达到共享的目的,从而节省系统内存空间,提高性能!

2、实际使用场景:


Message.java

private static final Object sPoolSync = new Object();
private static Message sPool;
private static int sPoolSize = 0;
    
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();
}

MessageQueue中会不停有Message对象进来,为了节省内存空间,这些Message对象就可以复用。因为JVM不是会立即
回收这些用过的对象,而是要等到内存不够用或者强制调用的时候才会调用jc回收,那些没有及时回收但又不再使用
的Message对象就容易造成内存浪费,所以可以使用享元模式来避免这种浪费。

你可能感兴趣的:(设计模式)